Mongo pymongo 中使用 forEach 函数的聚合查询不起作用
Mongo aggregate query with forEach function in pymongo not working
我有以下mongo聚合查询
db.configurations.aggregate([{$group:{_id:{model:"$model", vendor :"$vendor",access_level : "$access_level",config_data_type :"$config_data_type"}, dups:{$push:"$_id"}, count: {$sum: 1}}},
{$match:{count: {$gt: 1}}}
]).forEach(function(doc){
doc.dups.shift();
db.configurations.remove({_id : {$in: doc.dups}});
});
对于 pymongo 我写了一个等价的:
pipeline = [{"$group":{"_id":{"model":"$model", "vendor" :"$vendor","access_level" : "$access_level","config_data_type" :"$config_data_type"}, "dups":{"$push":"$_id"}, "count": {"$sum": 1}}},{"$match":{"count": {"$gt": 1}}}]
dest_col.aggregate(pipeline).forEach(bson.Code( '''
function(doc){
doc.dups.shift();
dest_col.remove({"_id ": {"$in": doc.dups}});
}'''));
它导致以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'CommandCursor' object has no attribute 'forEach'
如果我有任何语法错误,请更正。或者让我知道是否需要遵循任何其他格式才能使其正常工作
将聚合包裹在 list
内,如下所示 - 因为聚合函数 returns 一个 cursor
对象。之前的解决方案也不起作用,因为 pythin 没有 forEach
之类的东西。您将不得不 for in
进行迭代。
result = list(dest_col.aggregate(pipeline))
for doc in result:
bson.Code( '''
function(doc){
doc.dups.shift();
dest_col.remove({"_id ": {"$in": doc.dups}});
}''')
I am not python developer. Plz chk the code for syntax errors.
我有以下mongo聚合查询
db.configurations.aggregate([{$group:{_id:{model:"$model", vendor :"$vendor",access_level : "$access_level",config_data_type :"$config_data_type"}, dups:{$push:"$_id"}, count: {$sum: 1}}},
{$match:{count: {$gt: 1}}}
]).forEach(function(doc){
doc.dups.shift();
db.configurations.remove({_id : {$in: doc.dups}});
});
对于 pymongo 我写了一个等价的:
pipeline = [{"$group":{"_id":{"model":"$model", "vendor" :"$vendor","access_level" : "$access_level","config_data_type" :"$config_data_type"}, "dups":{"$push":"$_id"}, "count": {"$sum": 1}}},{"$match":{"count": {"$gt": 1}}}]
dest_col.aggregate(pipeline).forEach(bson.Code( '''
function(doc){
doc.dups.shift();
dest_col.remove({"_id ": {"$in": doc.dups}});
}'''));
它导致以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'CommandCursor' object has no attribute 'forEach'
如果我有任何语法错误,请更正。或者让我知道是否需要遵循任何其他格式才能使其正常工作
将聚合包裹在 list
内,如下所示 - 因为聚合函数 returns 一个 cursor
对象。之前的解决方案也不起作用,因为 pythin 没有 forEach
之类的东西。您将不得不 for in
进行迭代。
result = list(dest_col.aggregate(pipeline))
for doc in result:
bson.Code( '''
function(doc){
doc.dups.shift();
dest_col.remove({"_id ": {"$in": doc.dups}});
}''')
I am not python developer. Plz chk the code for syntax errors.