如何解决使用$ match从具有相同键值的不同数组中查询
假设我有两个文档的简单JSON数据,它们都有两个不同的数组,分别是carPolicies
和paPolicies
。在这些数组中是名为policy
的对象,其中包含键“ agent”,值是“ 47”。
{
"_id": {
"$oid": "some_id"
},"name": "qwe","password": "pw","carPolicies": [
{
"policy": {
"agent": "47"
}
},{
"policy": {
"agent": "47"
}
}
],"paPolicies": [
{
"policy": {
"agent": "47"
}
},{
"policy": {
"agent": "47"
}
}
]
}
{
"_id": {
"$oid": "some_id"
},"name": "rty","password": "wp",{
"policy": {
"agent": "47"
}
}
]
}
使用mongoDB的$ match运算符,如何提出一个查询,即如果两个数组中的代理值均为47,它将返回我文档的名称?
这是我目前拥有的:
db.collection('users').aggregate([
// Get just the docs that contain an agent element where agent is === req.params.name
{$match: {$or: [{'paPolicies.policy.agent': req.params.name},{'carPolicies.policy.agent': req.params.name}]} },{
$project: {
policy: {
$filter: {
// how to do an 'or' operator at 'input' so it can be input: '$paPolicies.policy || $carPolicies.policy'
input: '$paPolicies.policy',as: 'police',cond: { $eq: ['$$police.agent',req.params.name]}
}
},_id: 1,name: 1
}
}
])
我知道上面的代码是错误的,但是我觉得这是我目前所能找到的最接近的解决方案,并希望能对我要实现的目标有所了解。
解决方法
如果我的要求正确的话。仅在dot(.)
notation作为第二个参数的.find()
查询中使用projection怎么样?
db.collection.find({
$or: [
{
"carPolicies.policy.agent": "47"
},{
"paPolicies.policy.agent": "47"
}
]
},{
"_id": 1,"name": 1
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。