鉴于我在User
集合中有这些文档:
{
userId: "user-a",
points: {
date: {
1: 100,
5: 20,
11: 65,
},
},
}
{
userId: "user-b",
points: {
date: {
31: 20,
25: 40,
11: 15,
},
},
}
我想要做的是我要查询存在points.date.[number]
值且[number]
<7的用户。我该怎么办?
答案 0 :(得分:3)
由于您的密钥未知,因此您必须使用$objectToArray
聚合将它们转换为某个密钥值对,然后可以轻松地$match
使用它
db.collection.aggregate([
{ "$match": { "points.date[number]": { "$exists": true }}},
{ "$addFields": {
"match": {
"$objectToArray": "$points.date"
}
}},
{ "$match": { "match.k": { "$lt": "7" }}},
{ "$project": { "match": 0 }}
])