2013-01-04 61 views
1

我有以下收集MongoDB中名爲「CanvasCollection」,我想用「50e6fcc2edcbc10613000022」的ID圖像對象出這個集合中的數組:如何從MongoDB中的集合中獲取某個元素?

{ 
"_id": ObjectId("50d1f440471ca84e1f000007"), 
"image": [{ 
    "_id": ObjectId("50e6fcc2edcbc10613000022"), 
    "type": "image", 
    "filename": "50e6fcc2edcbc10613000022.jpg", 
    "origname": "2811879134_7a57d7c586_m.jpg", 
    "filepath": "upload/50e6fcc2edcbc10613000022.jpg", 
    "thumbpath": "upload/50e6fcc2edcbc10613000022_small.jpg",) 
}], 
"text": [{ 
    "_id": ObjectId("50e6eda0edcbc1061300001b"), 
    "content": "Type your text here" 
}] 
} 

這似乎並不工作:

CanvasCollection.find({'_id': new BSON.ObjectID('50d1f440471ca84e1f000007')}, {'image' : {$elemMatch: {'_id': new BSON.ObjectID('50e6fcc2edcbc10613000022')}}}) 

任何想法如何得到這個確切:

{ 
    "_id": ObjectId("50e6fcc2edcbc10613000022"), 
    "type": "image", 
    "filename": "50e6fcc2edcbc10613000022.jpg", 
    "origname": "2811879134_7a57d7c586_m.jpg", 
    "filepath": "upload/50e6fcc2edcbc10613000022.jpg", 
    "thumbpath": "upload/50e6fcc2edcbc10613000022_small.jpg",) 
} 

回答

0

如果你有MongoDB的2.2版本,你可以做這樣的:

db.CanvasCollection.aggregate({$project: {image:1}},{ $unwind : "$image" },{ $match : {"image._id": ObjectId("50e6fcc2edcbc10613000022")}}) 

(這是從蒙戈殼),輸出會是這樣:

{ 
"result" : [ 
    { 
     "_id" : ObjectId("50d1f440471ca84e1f000007"), 
     "image" : { 
      "_id" : ObjectId("50e6fcc2edcbc10613000022"), 
      "type": "image", 
      "filename": "50e6fcc2edcbc10613000022.jpg", 
      "origname": "2811879134_7a57d7c586_m.jpg", 
      "filepath": "upload/50e6fcc2edcbc10613000022.jpg", 
      "thumbpath": "upload/50e6fcc2edcbc10613000022_small.jpg" 
     } 
    } 
], 
"ok" : 1 
} 

關於展開:http://docs.mongodb.org/manual/reference/aggregation/unwind/

類似的話題:Retrieve only the queried element in an object array in MongoDB collection ..

如果你有舊版本的MongoDB我認爲這是不可能的。