Ваш первый запрос запрашивает документ с определенным идентификатором, а значение 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" ] }