我有一个MongoDB
collection
其结构是这样的:
/* 1 */
{
"_id" : ObjectId("5c09a454dd42360001fd2515"),
"conversations" : {
"0" : {
"message" : "Message 1",
.
.
.
},
"1" : {
"message" : "Message 1"
.
.
.
},
"2" : {
"message" : "Message 5"
.
.
.
},
"3" : {
"message" : "Message 1"
.
.
.
},
"4" : {
"message" : "Message 2"
.
.
.
},
"5" : {
"message" : "Message 3"
},
"6" : {
"message" : "compliance"
},
"7" : {
"message" : "Google"
}
}
/* 2 */
{
"_id" : ObjectId("5c09a673c2a98f00012f4efb"),
"conversations" : {
"0" : {
"message" : "Message 11"
},
"1" : {
"message" : "Google",
},
"2" : {
"message" : "Message 7"
}
}
/* 3 */
{
"_id" : ObjectId("5c09f570173f7900015a82b2"),
"conversations" : {
"0" : {
"message" : "Message 4"
},
}
.
.
.
在上述示例数据中,我在中有一组文档,collection
并且每个文档中都有一个名为的字典字段数组conversations
。在这个领域我已经词典字段列表(0
,1
,2
...)。我想做的是过滤所有文档,每个conversations
字段中的message
值为Message 4
。
我知道在每个文档中过滤特定字段的方法是db.getCollection('collection_1').find({conversation:""})
,但是我不知道如何将其应用于字典字段列表(例如我的案例)。有什么帮助吗?
您需要$ objectToArray运算符才能将具有未知键的对象转换为k
andv
字段的数组。然后在$ expr内部,您可以在该数组上应用$ filter来检查是否message
等于"Message 4"
db.collection.aggregate([
{
$match: {
$expr: {
$ne: [
{
$size: {
$filter: {
input: { $objectToArray: "$conversations" },
as: "conv",
cond: { $eq: [ "$$conv.v.message", "Message 4" ] }
}
}
},
0
]
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句