MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да внедря пост етикети в Mongo?

Ако маркерите, които използвате, и съответните им охлюви е малко вероятно да се променят, мисля, че вашият втори подход е по-добрият. Въпреки това бих предложил малка промяна - вместо съхраняване на масив от [name, slug] , направете полетата изрични, като създадете поддокумент на етикет, както в този пример post документ:

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

След това можете да търсите публикации с конкретен етикет, като използвате точкова нотация като това:

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

Тъй като tags е масив, mongo е достатъчно умен, за да съпостави заявката с всеки елемент от масива, а не с масива като цяло, а точковата нотация ви позволява да съпоставите с определено поле.

За заявка за публикации не съдържащ конкретен таг, използвайте $ne :

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

И за да търсите публикации, съдържащи един таг, но не и другия, използвайте $and :

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

Надявам се това да помогне!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb добавя брояч към всеки извлечен документ

  2. Не може да се стартира robomongo.sh с помощта на sh robomongo.sh в Ubuntu 14.04

  3. MongoDB директория с данни /data/db не е намерена

  4. Най-добрата практика на MongoDB за преброяване на свързани документи

  5. mongoDB различен и къде в същата заявка?