0
我正在研究在聚合管道MongoDB中查詢嵌入文檔數組的不同方法。看起來MongoDB對此的支持較少。在聚合管道中查詢嵌入文檔的mongo數組
比方說,我們在測試收集下列文件:
/* 1 */
{
"_id" : ObjectId("59df2c39fbd406137d4290b3"),
"a" : 1.0,
"arr" : [
{
"key": 1,
"sn" : "a",
"org": "A"
}
]
}
/* 2 */
{
"_id" : ObjectId("59df2c47fbd406137d4290b4"),
"a" : 2.0,
"arr" : [
{
"sn" : "b",
"key": 2,
"org": "B"
}
]
}
/* 3 */
{
"_id" : ObjectId("59df2c50fbd406137d4290b5"),
"a" : 3.0,
"arr" : [
{
"key": 3,
"sn" : "c",
"org": "C"
}
]
}
/* 4 */
{
"_id" : ObjectId("59df2c85fbd406137d4290b6"),
"a" : 1.0,
"arr" : [
{
"key": 1,
"sn" : "a",
"org": " A"
}
]
}
/* 5 */
{
"_id" : ObjectId("59df2c9bfbd406137d4290b7"),
"a" : 3.0,
"arr" : [
{
"sn" : "b",
"key": 2,
}
]
}
/* 6 */
{
"_id" : ObjectId("59df2e41fbd406137d4290b8"),
"a" : 4.0,
"arr" : [
{
"sn" : "b",
"key" : 2
}
]
}
/* 7 */
{
"_id" : ObjectId("59df2e5ffbd406137d4290b9"),
"a" : 5.0,
"arr" : [
{
"key" : 2,
"sn" : "b"
},
{
"sn" : "a",
"key" : 1
}
]
}
,我想分類基於上述文檔中使用下面的查詢「arr.sn」字段值:
db.test.aggregate([{"$addFields": {"Category" : { $switch: {
branches : [
{ case : { $eq : [ "$arr.nm", "a" ] }, then : "Category 1"}
],
default : "No Category"
}}}}])
但$ eq運算符沒有給出正確的結果,如果我在查找方法中使用相同的$ eq,它可以工作:
db.test.find({"arr.sn" : "a"})
我正在尋找只用單個字段的方式,在這裏是「arr.sn」字段。有沒有什麼方法可以從數組中的嵌入式文檔中投射字段?
任何幫助,將不勝感激。
感謝@Veeram您的解決方案,實際上是在$操作要求所有數組字段是存在,但是我在看的方式,只有單場做到這一點,在這裏案「 arr.sn「字段。我修改了有問題的數組條目。有沒有什麼方法可以從數組中的嵌入式文檔中投射字段? –
Np。我沒跟着你。你是什麼意思單場? 'arr.sn'返回值數組,'$ in'在值數組中查找值。我錯過了什麼 ? – Veeram
你的溶液作品而不是在陣列包括下面嵌入的文檔 對於離的情況下:ARR:[{ 「鍵」:1, 「SN」: 「一」, 「組織」: 「A」 }] 。 –