對於具有如下文檔的集合,我需要找到特定字段的文檔 - 例如。 lev3_field2
(在下面的文檔中)存在。當父字段未知時,在嵌套文檔中查找字段的記錄
我嘗試了以下操作,但是這不會返回任何結果,但字段lev3_field2
存在於某些文檔中。
db.getCollection('some_collection').find({"lev3_field2": { $exists: true, $ne: null } })
{
"_id" : ObjectId("5884de15bebf420cf8bb2857"),
"lev1_field1" : "139521721",
"lev1_field2" : "276183",
"lev1_field3" : {
"lev2_field1" : "4",
"lev2_field2" : {
"lev3_field1" : "1",
"lev3_field2" : {
"lev4_field1" : "1",
"lev4_field2" : "1"
},
"lev3_field3" : "5"
},
"lev2_field3" : {
"lev3_field3" : "0",
"lev3_field4" : "0"
}
}
}
UPDATE1:這是一個例子,然而真實文檔中它不知道什麼父字段是外地尋找。所以,而不是lev3_field2
,我會尋找`levM_fieldN'。
update2:速度對我來說不是主要關心的問題,我可以使用相對較慢的選項,因爲主要功能是查找具有所討論條件的文檔,並且一旦找到文檔並且架構據瞭解,可以通過包含父密鑰來重新編寫查詢以提高性能。
如果您想查找包含字段而不知道字段嵌套位置的文檔,則需要(a)遞歸JavaScript(s)表達式,並且速度非常慢。我建議使用另一種模式,記住易於查詢。 – Lex
@RyanBach - 爲我探索mongodb的原因是由於其無模式本質。在這種特殊情況下,我不太在意速度。 – user3206440