meg*_*gas 12 python mongodb pymongo
我在MongoDB中有一个文档,其中一个看起来像这样:
{
"_id" : 100,
"name" : "Something",
"items" : [
{
"item" : 47,
"color" : "red"
},
{
"item" : 44,
"color" : "green"
},
{
"item" : 39,
"color" : "blue"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在每个文档中,我需要找到最小项并删除它.所以它应该是这样的:
{
"_id" : 100,
"name" : "Something",
"items" : [
{
"item" : 47,
"color" : "red"
},
{
"item" : 44,
"color" : "green"
}
]
}
Run Code Online (Sandbox Code Playgroud)
看起来findAndModify应该在这里使用功能,但我不能再进一步了.
如何在数组中找到最小元素并将其删除?
我正在使用MongoDB和Pymongo驱动程序.
Kay*_*Kay 18
如果您不仅限于将查询放在一个步骤中,您可以尝试:
步骤1)使用$ unwind和$ group运算符的聚合函数来查找每个文档的最小项目
myresults = db.megas.aggregate( [ { "$unwind": "$items" },
{"$group": { '_id':'$_id' , 'minitem': {'$min': "$items.item" } } } ] )
Run Code Online (Sandbox Code Playgroud)
步骤2)循环结果和$从数组中拉出元素
for result in myresults['result']:
db.megas.update( { '_id': result['_id'] },
{ '$pull': { 'items': { 'item': result['minitem'] } } } )
Run Code Online (Sandbox Code Playgroud)
请找到我用普通javascript编写的解决方案.它应该直接通过MongoDb shell
cursor = db.students.aggregate(
[{ "$unwind": "$items" },
{ "$match": { "items.color": "green"}},
{ "$group": {'_id': '$_id', 'minitem': {
'$min': "$items.item"
}
}
}
]);
cursor.forEach(
function(coll) {
db.students.update({
'_id': coll._id
}, {
'$pull': {
'items': {
'item': coll.minitem
}
}
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14068 次 |
| 最近记录: |