2014-02-16 108 views
0

我在MongoDB的集合,它的結構是這樣的一個數組中指定的值的至少一個文件:MongoDB的查詢包含

[ 
    { 
    "_id": ObjectId("51bf000a3d489f2df59aa4c6"), 
    "courses": ["course1", "course2"] 
    }, { 
    "_id": ObjectId("52cc789a4df828450c16e52c"), 
    "courses": ["course3", "course4"] 
    } 
] 

我希望能夠查詢兩個文件像["course1", "course3"]這樣的數組,其中"course1"匹配第一個,"course3"匹配第二個文檔。

這可能沒有這樣的複雜查詢嗎?

{ 
    "$or": [ 
    { "courses": "course1" }, 
    { "courses": "course3" } 
    ] 
} 

對不起,我的英文很差!

+0

如果這是一個頻繁的查詢,請務必爲'courses'添加一個索引到集合中。 – WiredPrairie

+0

當然可以! – Till

回答

0

下面的查詢等於您:
db.coll.find({ courses: { $in: ["course1", "course3"] } })

+0

謝謝!我讀了'$ in'運算符,但不知道它也適用於陣列。 – Till

0

如果你想在你的結果集進一步的工作,你也可以使用總量和調整你的結果如你所願。

db.courses.aggregate([ 
      {$unwind:"$courses"}, 
      {$match:{$or:[{courses:"course1"},{courses:"course3"}]}}, 
      {$project:{_id:0, courses:1}} 
    ]); 

或使用$在如下操作:

db.courses.aggregate([ 
     {$unwind:"$courses"}, 
     {$match:{courses:{$in:["course1","course3"]}}}, 
     {$project:{_id:0, courses:1}} 
     ])