orders 收集,其文件如下:
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 路径
shipments.products.orderDetails.id
_id
我试过:
db.orders.aggregate([{ "$addFields": { "same": { "$eq": ["$shipments.products.orderDetails.id", "$_id"] } } }])
添加字段的步骤 same 相同的 作为 false
same
相同的
false
我想做的是比较 _id 将文档与所有 装运。产品。订单详细信息。身份证件 装运。产品。订单详细信息。身份证件 s匹配
装运。产品。订单详细信息。身份证件
您当前的尝试失败,因为与“单个值”相比,该符号返回一个“数组”。
因此,要么使用 $in
$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 文档的属性。
true
id