我是MongoDB的新手,並且在爲我正在開發的新項目設置特定查詢時遇到了一些困難。如何在MongoDB中找到深嵌入數組的對象?
我有一個數據結構,看起來像這樣(簡體版):
games: {_id: ..., scenes: [{_id: ..., views: [{_id: ...}]}]}
(即遊戲中包含的場景集合,場景中包含的視圖的集合)。
我想在這裏查詢的是一個特定的視圖對象。我想答案包括使用$ elemMatch,但我該如何設置?一些研究+玩耍後,我知道我能做到這一點得到了現場:
db.collection("games").findOne({
_id: ObjectId(req.params.gid)},
{
scenes: {
$elemMatch: {_id: ObjectId(req.params.sid)}
}
}...
但我怎麼延長這個,使其只拉特定視圖我感興趣的(由_id) ?
我想我總是可以找到我正在尋找手動使用for循環的視圖對象,這帶來了另一個問題。 Wrt的性能,最好是使用Mongo來做這樣的查詢,或者手動拉動整個文檔來循環收集?
您不能僅獲取數組中的對象。您必須提取整個文檔。如果您想要自己創建子文檔,則需要使用聚合框架。 – cdbajorin
@cdbajorin當你說「在他們自己的」,你的意思是不可能用_id值過濾掉我不想要的視圖?或者你的意思是我查找的查詢會給我一個類似'result.scenes [0] .views [0]'的結構嗎?我對後者很好。 – JSideris