代码之家  ›  专栏  ›  技术社区  ›  Ayush Gupta

将数组中的属性与文档中的单个属性进行比较

  •  0
  • Ayush Gupta  · 技术社区  · 8 年前

    orders 收集,其文件如下:

    [{
        "_id" : ObjectId("59537df80ab10c0001ba8767"),
        "shipments" : {
            "products" : [
                {
                    "orderDetails" : {
                        "id" : ObjectId("59537df80ab10c0001ba8767")
                    }
                },
                {
                    "orderDetails" : {
                        "id" : ObjectId("59537df80ab10c0001ba8767")
                    }
                }
            ]
        },
    }
    {
        "_id" : ObjectId("5953831367ae0c0001bc87e1"),
        "shipments" : {
            "products" : [
                {
                    "orderDetails" : {
                        "id" : ObjectId("5953831367ae0c0001bc87e1")
                    }
                }
            ]
        },
    }]
    

    shipments.products.orderDetails.id _id 路径

    我试过:

    db.orders.aggregate([{
        "$addFields": {
            "same": {
                "$eq": ["$shipments.products.orderDetails.id", "$_id"]
            }
        }
    }])
    

    添加字段的步骤 same 相同的 作为 false

    我想做的是比较 _id 将文档与所有 装运。产品。订单详细信息。身份证件 装运。产品。订单详细信息。身份证件 s匹配

    1 回复  |  直到 8 年前
        1
  •  1
  •   Neil Lunn    8 年前

    您当前的尝试失败,因为与“单个值”相比,该符号返回一个“数组”。

    因此,要么使用 $in

    db.orders.aggregate([
      { "$addFields": {
        "same": {
          "$in": [ "$_id", "$shipments.products.orderDetails.id" ]  
        }  
      }}
    ])
    

    $setIsSubset

    db.orders.aggregate([
      { "$addFields": {
        "same": {
          "$setIsSubset": [ "$shipments.products.orderDetails.id", ["$_id"] ]  
        }  
      }}
    ])
    

    在这种情况下,它要做一个比较,看看这些“集合”是否有一个使 _id 值数组的“子集”。

    true id 指定路径的数组项中的属性与 _id 文档的属性。

    推荐文章