2016-11-01 43 views
0

我想通過標識的,如下面的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中?

回答

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

OR

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

謝謝。有用。 –

0

這裏我查詢時,工作原理:

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") ] } } 
]}) 

感謝名單!

相關問題