有問題的MongoDB的文檔結構如下:MongoDB中
{
"_id": ObjectId("54247a68fab6b6775d000062"),
"owner": "1",
"version": "Version 1",
"name": "Test20",
"u_at": ISODate("2014-09-25T20:26:16.140Z"),
"c_at": ISODate("2014-09-25T20:26:16.140Z"),
"canvases": [
{
"_id": ObjectId("54247a68fab6b6775d000063"),
"nodes": [
{
"_id": ObjectId("54247a68fab6b6775d000060"),
"filePathTemplate": "LETSDOEMAIL"
},
{
"_id": ObjectId("54247a68fab6b6775d000061"),
"filePathTemplate": "LETSDOFACEBOOK"
}
]
}
]
}
我有兩件事情主要是掙扎:
搜索特定節點並且只返回結果中的節點。以下是我目前使用的查詢(瀏覽所有相關SO問題後):
db.getCollection("coll").find({_id: ObjectId("54247a68fab6b6775d000062")}, {canvases:{$elemMatch:{nodes:{$elemMatch:{_id: ObjectId("54247a68fab6b6775d000060")}}}}})
但是這給後面的帆布,包含節點搜索,而不是節點。
{ "_id": ObjectId("54247a68fab6b6775d000062"), "canvases": [ { "_id": ObjectId("54247a68fab6b6775d000063"), "nodes": [ { "_id": ObjectId("54247a68fab6b6775d000060"), "filePathTemplate": "LETSDOEMAIL" }, { "_id": ObjectId("54247a68fab6b6775d000061"), "filePathTemplate": "LETSDOFACEBOOK" } ] } ] }
由於上述問題,更新節點文檔中的字段也是一個問題。這是我從其他SO問題,但都無濟於事了查詢:
db.getCollection("coll").update({canvases: {$elemMatch:{nodes:{$elemMatch:{_id: ObjectId("54247a68fab6b6775d000060")}}}}}, {$set: {"canvases.$.nodes.$.filePathTemplate": "21"}})
任何幫助,將不勝感激。
那麼在這種情況下,因爲我使用[elemMatch投影](http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/),' find()'返回包含匹配節點的畫布,而不是整個文檔。 – shardnit 2014-09-26 16:45:56