данной коллекции, такие как:MongoDB: заменить элемент в массиве с одним или несколькими элементами
{
_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}})
Я ищу для более эффективного метода, используя update команду $ тянуть/удалите согласованный элемент и $ push с $ каждым модификатором, чтобы вставить новые элементы. Но я нахожусь в положении нахождения $ -го положения массива, в котором должны выполняться операции push. Еще одно предостережение в том, что я хочу сохранить позиции старых фруктов для новых фруктов. то есть первые новые фрукты будут иметь такое же положение, как и старые плоды.
Команда $ push добавит «вишни» и «даты» ко всем документам в коллекции. Этого можно избежать, выполнив $ push сначала, используя «бананы» в запросе, а затем выполнив $ pull. Но это все равно не сохранит позиции. – gnub
Как я понимаю, вы хотите нажать «вишни и даты» в положение «бананы» и потянуть «бананы» вправо? – Yogesh
есть. вот что я хочу делать. – gnub