例子: Mongo db collection:
[
{
"user_id": 1,
"lead_id": 901,
...
...
},
{
"user_id": 2,
"lead_id": 902,
...
...
},
{
"user_id": 2,
"lead_id": 903,
...
...
},
{
"user_id": 3,
"lead_id": 999,
...
...
},
]
我有一个物件阵列:
const reqArr = [
{
"user_id": 1,
"lead_id": 901,
},
{
"user_id": 2,
"lead_id": 999,
}
]
我想基于这两者来查询数据库user_id
并存lead_id
在于阵列中的每个物件中reqArr
。像这样的东西或聚合管道
Model.find(reqArr)
我想要的输出是这样的:
[{
"user_id": 1,
"lead_id": 901,
...
...
}]
我只知道如何基于一个栏位的阵列进行查询,例如Model.find({_id: {"$in": [array of ids ]}})
物件阵列中的多个栏位,但不知道。有什么想法或解决方法可以实作上述输出或否定上述输出?我只需要reqArr
db 集合中存在哪些物件,哪些不存在。谢谢你。
uj5u.com热心网友回复:
简单的 $or
db.collection.aggregate([
{
"$match": {
"$or": [
{
"user_id": 1,
"lead_id": 901
},
{
"user_id": 2,
"lead_id": 902
}
]
}
}
])
mongoplayground
节点
const reqArr = [
{
"user_id": 1,
"lead_id": 901,
},
{
"user_id": 2,
"lead_id": 999,
}
]
Model.find({ "$or": reqArr})
uj5u.com热心网友回复:
执行上述操作的最简单方法是:
const results = await Promise.all(reqArr.map(req => {
const { user_id, lead_id } = req;
return Model.findOne({ user_id, lead_id });
}));
我们映射reqArr
. 对于每个项目 ( req
),我们将其分解为两个变量user_id
和lead_id
。
然后我们查询单个档案(我假设每个user_id
和lead_id
对只有一个档案,否则需要稍微调整。
然后我们回传findOne
承诺,产生一系列承诺,我们将其传入Promise.all
以异步等待它们。
这应该会产生lead_iq
与user_id
.reqArr
如果其中一些组合不存在于数据库中,则阵列的这些元素将存在undefined
,您可以继续处理这些组合,但您需要。
0 评论