MongoDB:如何将对象值与数组值进行比较并在此对象中添加字段
我有一个具有这种结构的MongoDB: 注册是一个数组&其对象如下所示:MongoDB:如何将对象值与数组值进行比较并在此对象中添加字段,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个具有这种结构的MongoDB: 注册是一个数组&其对象如下所示: { "_id" : ObjectId("5e844235ead49b7ff33962d3"), "date" : "2-jul", "firstname" : "John", "lastname" : "Doe", "email" : "john@doe.com", "education" : "University
{
"_id" : ObjectId("5e844235ead49b7ff33962d3"),
"date" : "2-jul",
"firstname" : "John",
"lastname" : "Doe",
"email" : "john@doe.com",
"education" : "University",
"gender" : "male",
"age" : "32",
"workshop" : [2,3,6]
}
"known" : [
"tina@hotmail.com",
"sanders@hotmail.com",
"kyrana@hotmail.com"
]
而已知的如下所示:
{
"_id" : ObjectId("5e844235ead49b7ff33962d3"),
"date" : "2-jul",
"firstname" : "John",
"lastname" : "Doe",
"email" : "john@doe.com",
"education" : "University",
"gender" : "male",
"age" : "32",
"workshop" : [2,3,6]
}
"known" : [
"tina@hotmail.com",
"sanders@hotmail.com",
"kyrana@hotmail.com"
]
如何检查注册。电子邮件是否存在于已知的中?如果存在,您如何向注册添加字段:emailIsKnown:true
或emailIsKnown:false
我尝试了不同的过滤器、replaceRoot、管道查找和合并对象。但我似乎不知道如何只完成最少的比较结果或向registrations对象添加字段。您可以使用以下查询来完成此操作:
db.collection.aggregate([
/** Re-create 'registration' array field */
{
$addFields: {
registration: {
$map: {
input: "$registration", // Iterate on 'registration' array
in: {
$cond: [
{ $in: ["$$this.email", "$known"] }, // Check if current object's email exists in 'known' array
{ $mergeObjects: [{ emailIsKnown: true }, "$$this"] }, // If Yes, add new field with true to existing Object
{ $mergeObjects: [{ emailIsKnown: false }, "$$this"] } // If No, add new field with false to existing Object
]
}
}
}
}
}
]);
测试:注册是一个对象数组还是一个对象?@whoami一个对象数组Hanks whoami,很高兴有一个像您这样的扩展示例,包括this关键字、映射和条件。从现在开始,我会玩得很开心的。您的解决方案立即奏效,谢谢!