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

我有一个具有这种结构的MongoDB:

注册是一个数组&其对象如下所示:

{
        "_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关键字、映射和条件。从现在开始,我会玩得很开心的。您的解决方案立即奏效,谢谢!