Mongodb: объединить $in и $nin
В моей коллекции posts
У меня есть такие документы
[{
_id : ObjectId("post-object-id"),
title : 'Post #1',
category_id : ObjectId("category-object-id")
}]
Мне нужно сделать несколько запросов, где я задаю диапазон сообщений на основе их category_id (может быть несколько идентификаторов), но исключаю некоторые из них.
Я пытался с запросом (в оболочке):
db.posts.find({$and: [
{_id: { $nin : ['ObjectId("post-object-id")']}},
{category_id : { $in : ['ObjectId("category-object-id")']}}
]})
Я возвращаю 0, если считать ().
Тем не менее, если я изменю атрибут category_id, удаляю $in и просто добавлю один идентификатор, он будет работать следующим образом:
db.posts.find({$and: [
{_id: { $nin : ['ObjectId("58a1af81613119002d42ef06")']}},
{category_id : ObjectId("58761634bfb31efd5ce6e88d")}
]})
но это решение позволяет мне найти только одну категорию.
Как бы я смог объединить $in и $ nin с objectId так же, как описано выше?
1 ответ
Решение
Это будет работать, просто удалите одинарные кавычки вокруг ObjectId
db.posts.find({$and: [
{_id: { $nin : [ObjectId("post-object-id")]}},
{category_id : { $in : [ObjectId("category-object-id")]}}
]})
Вы не должны помещать одинарные кавычки вокруг ObjectId, это делает их строками