mongodb查询通配符嵌套对象



我有一个名为Event的集合,我在这里创建了一个带有一些示例数据的Mongo Playground: https://mongoplayground.net/p/DNfmIMLIs2N

我正在尝试查询一个集合,其中未知键的值与我的查询值相匹配。我有两个实际的例子。

示例1:每个事件都有一个"pricingDict"这是一个键控对象,键是货币,值是金额。{usd: 40.50, aud: 60.25}。我希望能够找到所有事件,它们的pricingDict的值大于0,而不管货币。

我希望做的是这样的事情:db.collection("Event").find({"pricingDict.*": { $gt: 0 }})根据上面的示例数据,我希望它返回event2event3

示例2:相同的事件类将有一个名为eventmanager &quot的键对象,键将是userId,值将是一个对象,该对象将有一个名为role的键。我希望能够找到所有事件,他们有一个角色为"Admin">

的用户我希望做的是这样的事情:db.collection("Event").find({"eventManagers.*.role": "Admin"})根据上面的示例数据,我希望这将返回event1event3

使用$objectToArray将对象转换为k-v元组数组。然后使用$filter对转换后的数组执行查询。

查询1

db.collection.aggregate([
{
"$match": {
$expr: {
$ne: [
{
"$filter": {
"input": {
"$objectToArray": "$pricingDict"
},
"as": "pd",
"cond": {
$gt: [
"$$pd.v",
0
]
}
}
},
[]
]
}
}
}
])

这是Mongo游乐场供您参考。

db.collection.aggregate([
{
"$match": {
$expr: {
$ne: [
{
"$filter": {
"input": {
"$objectToArray": "$eventManagers"
},
"as": "em",
"cond": {
$eq: [
"$$em.v.role",
"Admin"
]
}
}
},
[]
]
}
}
}
])

这是Mongo游乐场供您参考。

最新更新