$ nin проблемы с MongoDB - PullRequest
       4

$ nin проблемы с MongoDB

0 голосов
/ 26 июля 2011

Есть идеи, почему этот запрос

{
  "_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
  "categories": {
    "$nin": [
      "Arts"
    ]
  }
}

возвращает следующую запись, когда мы явно исключили "Arts" с $ nin выше?

{
   "_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
   "categories": {
     "0": "Arts",
     "1": "Arts - Performance" 
  }
}

в качестве проверки работоспособности я изменил $ nin на $ в

{
  "_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
  "categories": {
    "$in": [
      "Arts"
    ]
  }
}

и ничего не вернулось, как ожидалось ... но я все еще озадачен результатом $ nin выше!

1 Ответ

0 голосов
/ 26 июля 2011

Ваш первый запрос запрашивает документ с определенным идентификатором, а значение categories отсутствует в списке строк (в данном случае ["Arts"]). Значение для categories для этого документа является внедренным документом, { "0": "Arts", "1": "Arts - Performance" }.

Второй запрос ничего не возвращает, поскольку этот встроенный документ отсутствует в списке значений для поля categories.

Редактировать: Если вы хотите иметь возможность искать категории, используя $in и $nin, вам следует рассмотреть возможность преобразования поддокумента categories в массив:

> db.foo.save({categories: ["Arts", "Arts - Performance"]})                                                     
> db.foo.save({categories: ["Sports", "Sports - Baseball"]})
> db.foo.find({categories: {$nin: ["Arts"]}})                 
{ "_id" : ObjectId("4e2e3b49aed2871354b374eb"), "categories" : [ "Sports", "Sports - Baseball" ] }
> db.foo.find({categories: {$in: ["Arts"]}})                  
{ "_id" : ObjectId("4e2e3b1eaed2871354b374ea"), "categories" : [ "Arts", "Arts - Performance" ] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...