MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để triển khai các thẻ bài trong Mongo?

Nếu các thẻ bạn sử dụng và các slug tương ứng của chúng không có khả năng thay đổi, tôi nghĩ cách tiếp cận thứ hai của bạn là cách tốt hơn. Tuy nhiên, tôi sẽ đề xuất một thay đổi nhỏ - thay vì lưu trữ một mảng [name, slug] , hãy làm cho các trường rõ ràng bằng cách tạo tài liệu con thẻ như trong ví dụ này post tài liệu:

{
    "_id" : ObjectId("4ee33229d8854784468cda7e"),
    "title" : "My Post",
    "content" : "This is a post with some tags",
    "tags" : [
        {
            "name" : "meta",
            "slug" : "34589734"
        },
        {
            "name" : "post",
            "slug" : "34asd97x"
        },
    ]
}

Sau đó, bạn có thể truy vấn các bài đăng có một thẻ cụ thể bằng cách sử dụng ký hiệu dấu chấm như thế này:

db.test.find({ "tags.name" : "meta"})

Vì thẻ tags là một mảng, mongo đủ thông minh để so khớp truy vấn với bất kỳ phần tử nào của mảng thay vì toàn bộ mảng và ký hiệu dấu chấm cho phép bạn so khớp với một trường cụ thể.

Để truy vấn các bài đăng không chứa một thẻ cụ thể, hãy sử dụng $ne :

db.test.find({ "tags.name" : { $ne : "fish" }})

Và để truy vấn các bài đăng có chứa một thẻ nhưng không chứa thẻ kia, hãy sử dụng $and :

db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})

Hy vọng điều này sẽ hữu ích!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB khóa ghi ở cấp độ nào? (hoặc:ý nghĩa của nó theo mỗi kết nối

  2. Hiển thị tài liệu MongoDB bằng HTML

  3. Cái nào nên là singleton trong một ứng dụng? MongoClient hoặc MongoDatabase hoặc MongoCollection?

  4. Truy vấn MongoDB từ trình duyệt bằng chương trình phụ trợ bình

  5. So sánh dữ liệu MongoDB Spring giữa các trường