在两个集合之间聚合,并在pymongo中的第一个集合中更新文档



我正在使用pymongo。我有一个集合,要根据另一个集合中的值更新其字段。这是收藏的一份文件1。

{ _id: ObjectId("5fef7a23d0bdc785d4fc94e7"),
path: 'path1.png',
type: 'negative',
xmin: NaN,
ymin: NaN,
xmax: NaN,
ymax: NaN}

来自集合2:

{ _id: ObjectId("5fef7a24d0bdc785d4fc94e8"),
path: 'path1.png',
xmin: 200,
ymin: 200,
xmax: 300,
ymax: 300}

如何更新集合1,使示例文档看起来像:

{ _id: ObjectId("5fef7a23d0bdc785d4fc94e7"),
path: 'path1.png',
type: 'negative,
xmin: 200,
ymin: 200,
xmax: 300,
ymax: 300}

将collection2提取到dict变量中,并使用$set更新collection1,例如

for doc in db.collection2.find({}, {'_id': 0}):
db.collection1.update_one({'path': doc.get('path')}, {'$set': doc})

我已经找到了一种将其输出到单独集合中的方法,但仍然不确定如何将它输出到同一集合中。

db.collection1.aggregate[
{
'$match': {
'xmin': 'NaN'
}
}, {
'$lookup': {
'from': 'collection2', 
'localField': 'path', 
'foreignField': 'path', 
'as': 'inferences'
}
}, {
'$project': {
'inferences.xmin': 1, 
'inferences.ymin': 1, 
'inferences.xmax': 1, 
'inferences.ymax': 1, 
'path': 1,  
'type': 1, 
'_id': 0
}
}, {
'$unwind': {
'path': '$inferences', 
'preserveNullAndEmptyArrays': False
}
}, {
'$addFields': {
'xmin': '$inferences.xmin', 
'ymin': '$inferences.ymin', 
'xmax': '$inferences.xmax', 
'ymax': '$inferences.ymax'
}
}, {
'$project': {
'path': 1, 
'type': 1, 
'xmin': 1, 
'ymin': 1, 
'xmax': 1, 
'ymax': 1
}
}, {
'$out': 'collection3'
}
]

相关内容

  • 没有找到相关文章

最新更新