我有一个集合(1),包含以下字段:
{
_id: 1,
value: ["A","B","C","D"]
}
和在另一个集合(2)中,我有以下字段:
{
_id: 1,
predicted_value: [
{
value: "A",
num: 1,
},
{
value: "B",
num: 2,
},
{
value: "D",
num: 2
}
],
real_prediction: <Collection1.value>
predicted_by: "Person1",
is_correct_prediction: <bool>
}
我现在的目标是通过以下方式更新第二个集合:如果一个条目被放入集合1的value中(我已经在监听这种类型的事件),如果值数组中的一个元素也在predicted_value数组中,那么集合2应该通过收集集合1的值来更新实际预测并更新布尔值is_correct_prediction。在这种情况下,它应该设置为True,默认情况下它是False。是否有某种mongo查询,可以处理这个?这当然可以用Python完成,但是也可以只使用mongo吗?
可以对采集1执行$lookup
,使用$setIntersection
检查is_correct_prediction
是否为真
db.coll2.aggregate([
{
"$lookup": {
"from": "coll1",
"localField": "_id",
"foreignField": "_id",
"as": "coll1Lookup"
}
},
{
"$unwind": "$coll1Lookup"
},
{
$set: {
real_prediction: "$coll1Lookup.value",
is_correct_prediction: {
$ne: [
[],
{
"$setIntersection": [
"$coll1Lookup.value",
"$predicted_value.value"
]
}
]
}
}
},
{
$unset: "coll1Lookup"
},
{
"$merge": {
"into": "coll2",
"on": "_id"
}
}
])
Mongo操场