我正在尝试查询集合中的数组,并在数组中存在对象时投影值"true“。如果该对象不存在于数组中,则项目"false“。我在MongoDB工作,我对它不太熟悉。
在我的场景中,我有两个正在使用的集合。我正在聚合一组‘员工’成员,我正在执行一个$lookup功能到一个‘业务’集合。在“业务”中,我拥有一系列业务功能。
例如,我收集了工作人员
staff = [
...
{_id: 1, businessId: 11},
{_id: 2, businessId: 22},
....
]企业征集
businesses = [
...
{_id: 11, capabilities: ["claiming", "pushing"]},
{_id: 22, capabilities: ["claiming", "popping"]},
....
]并设置如下所示的$lookup
db.getCollection('staff').aggregate([
{
$lookup:
{
from: "businesses",
localField: "businessId",
foreignField: "_id",
as: "business_Info"
}
},如果“$project”出现在“功能”中,那么我如何才能使每个工作人员的$canClaim: true这样的值出现呢?
发布于 2019-05-10 07:05:48
可以使用$in聚合运算符检查数组是否包含该值。
db.getCollection("staff").aggregate([
{ "$lookup": {
"from": "businesses",
"localField": "businessId",
"foreignField": "_id",
"as": "business_Info"
}},
{ "$unwind": "$business_Info" },
{ "$addFields": {
"canClaim": { "$in": ["claiming", "$business_Info.capabilities"] }
}}
])发布于 2019-05-11 06:42:02
db.getCollection("staff").aggregate(
// Pipeline
[
// Stage 1
{
$lookup: // Equality Match
{
from: "businesses",
localField: "businessId",
foreignField: "_id",
as: "businessInfo"
}
// Uncorrelated Subqueries
// (supported as of MongoDB 3.6)
// {
// from: "<collection to join>",
// let: { <var_1>: <expression>, …, <var_n>: <expression> },
// pipeline: [ <pipeline to execute on the collection to join> ],
// as: "<output array field>"
// }
},
// Stage 2
{
$project: {
businessId: 1,
businessInfo: {
$arrayElemAt: ['$businessInfo', 0]
}
}
},
// Stage 3
{
$addFields: {
"businessInfo.canClaim": {
$cond: {
if: {
$gte: [{
$indexOfArray: ["$businessInfo.capabilities", 'claiming']
}, 0]
},
then: true,
else: false
}
}
}
},
]
);https://stackoverflow.com/questions/56072336
复制相似问题