如何在MongoDB中通过$in操作符选择文档



我想通过Id抓取文档下的所有内容,就像下面的SQL查询:

Select * from table 
where subdoc1.id in (1234, 2345, 3456) 
  or subdoc2.id in (1234, 2345, 3456)

下面是我的文档的结构:

{ 
  "id" : new ObjectId("234565"),
  "subdocs1" : [ {
                   "id" : "1234",
                   ... },
                 {
                   "id": "2345",
                   ... }],
   "subdocs2"  : [ {
                   "id" : "3456",
                   ... },
                 {
                   "id": "7890",
                   ... }]
}

在MongoDB中如何查询?

db.collection.find({
$and : [{"subdocs1._id": {"$in" : ["1234", "2345", "3456"]},
{"subdocs2._id": {"$in" : ["1234", "2345", "3456"]}}]
})

db.collection.find({
$and : [{"subdocs1":{"$elemMatch" : {"$_id" : {"$in" : ["1234", "2345", "3456"]}}}},
{"subdocs2:{"$elemMatch" : {"$_id" : {"$in" : ["1234", "2345", "3456"]}}}}]
})

这是我的查询,这是有效的:

db.getCollection('documents').find({
$or : [
    { "subdoc1._id" : { "$in" : [ new ObjectId("5807a60afc84c80a5ea86218"), new ObjectId("5808ac5cfc841deda17f827b") ] } },
    { "subdoc2._id" : { "$in" : [ new ObjectId("5807a60afc84c80a5ea86218"), new ObjectId("5808ac5cfc841deda17f827b") ] } },
    { "subdoc3._id" : { "$in" : [ new ObjectId("5807a60afc84c80a5ea86218"), new ObjectId("5808ac5cfc841deda17f827b") ] } },
    { "subdoc4._id" : { "$in" : [ new ObjectId("5807a60afc84c80a5ea86218"), new ObjectId("5808ac5cfc841deda17f827b") ] } }
]})

谢谢! !

最新更新