Mongodb:结合$ in和$ nin

时间:2017-02-14 12:08:43

标签: mongodb mongodb-query aggregation-framework mongodb-shell

在我的收藏posts我有这样的文件

[{
  _id : ObjectId("post-object-id"),
  title : 'Post #1',
  category_id : ObjectId("category-object-id")

}]

我需要根据他们的category_id(可以是多个ID)对我的一系列帖子进行一些查询,但不包括其中一些帖子。

我尝试过查询(在shell中):

db.posts.find({$and: [
  {_id: { $nin : ['ObjectId("post-object-id")']}}, 
  {category_id : { $in : ['ObjectId("category-object-id")']}}
]})

如果count(),我返回0。

但是,如果我更改了category_id属性并删除了$ in,只需包含一个 ID,就像这样:

db.posts.find({$and: [
  {_id: { $nin : ['ObjectId("58a1af81613119002d42ef06")']}}, 
  {category_id : ObjectId("58761634bfb31efd5ce6e88d")}
]})

但是这个解决方案只能让我找到一个类别。

我如何以与上述相同的方式将$ in和$ nin与objectId结合起来?

1 个答案:

答案 0 :(得分:2)

这将有效,只需删除ObjectId

周围的单引号
db.posts.find({$and: [
  {_id: { $nin : [ObjectId("post-object-id")]}}, 
  {category_id : { $in : [ObjectId("category-object-id")]}}
]})

你不应该在ObjectId周围放置单引号,而是将它们作为字符串