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, это делает их строками

Другие вопросы по тегам