给定一个集合,例如:
{
_id: 1,
fruits: [ "apples", "pears", "oranges", "grapes", "bananas" ],
}
{
_id: 2,
fruits: [ "plums", "kiwis", "oranges"],
}
{
_id: 3,
fruits: [ "plums", "kiwis", "oranges", "bananas", "apples" ],
}
我想用“樱桃”和“日期”替换所有“香蕉”实例。所以结果集合将是:
{
_id: 1,
fruits: [ "apples", "pears", "oranges", "grapes", "cherries", "dates"],
}
{
_id: 2,
fruits: [ "plums", "kiwis", "oranges"],
}
{
_id: 3,
fruits: [ "plums", "kiwis", "oranges", "cherries", "dates", "apples"],
}
我通过 pymongo 使用的一种方法:
for document in db.collection.find({'fruits':'bananas'}):
fruits_list = document['fruits']
new_fruits_list = []
for fruit in fruit_list:
if fruit != 'bananas':
new_fruit_list.append(fruit)
else:
for new_fruit in ['cherries','dates']:
new_fruit_list.append(new_fruit)
db.collection.update({'_id' : document['_id']}, {'$set' : {'fruits' : new_fruit_list}})
我正在寻找一种更有效的方法,使用更新命令 $pull/remove 匹配的元素并使用 $each 修饰符 $push 来插入新元素。但是我很难找到要执行推送操作的数组的 $position。另一个需要注意的是,我想为新水果保留旧水果的位置。即第一个新水果将与旧水果具有相同的位置。