mongodb 数据是这样的:
{
"_id": "123dsadasfa454sdsaw",
"hashmap": {
"uuid-12sadsadw5": {
"name": "bob"
},
"uuid-12sadsadwew5": {
"name": "alice"
}
},
"age": 10
}
“hashmap”如java HashMap,键为uuid,如“uuid-12sadsadwew5”,值为object。我想获取“hashmap”值中的名称不为空的数据。我使用 sql :
db.tabl1.find({"hashmap.values.name":{$ne:null}})
但不能得到正确的结果
您可以使用此聚合查询:
$objectToArray
创建一个包含值k
和的数组v
。由于我们不知道键 ( k
),我们可以按值 ( v
)进行搜索。$unwind
数组$match
名称不为空的值。$arrayToObject
。db.collection.aggregate([
{
"$set": {
"hashmap": {
"$objectToArray": "$hashmap"
}
}
},
{
"$unwind": "$hashmap"
},
{
"$match": {
"hashmap.v.name": {
"$ne": null
}
}
},
{
"$group": {
"_id": "$_id",
"hashmap": {
"$push": "$hashmap"
}
}
},
{
"$set": {
"hashmap": {
"$arrayToObject": "$hashmap"
}
}
}
])
示例在这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句