2013-12-23 4 views
-2

У меня есть следующий набор с тремя документами:Как перемещать элементы массива между коллекциями?

{ 
    _id: 1 
    items: ['1a', '1b', '1c'] 
}, 
{ 
    _id: 2, 
    items: ['2a', '2b', '2c'] 
}, 
{ 
    _id: 3, 
    items: [] 
} 

У меня есть запрос, который должен двигаться «1а», «1c», «2a», элементы «2b» из их соответствующих документов в документы с _id: 3.

мне нужно получить следующий результат:

{ 
    _id: 1 
    items: ['1b'] 
}, 
{ 
    _id: 2, 
    items: ['2c'] 
}, 
{ 
    _id: 3, 
    items: ['1a','1c', '2a', '2b'] 
} 

Помогите мне пожалуйста. Что лучше для решения моей проблемы?

+0

Эй, ребята, вы можете объяснить, почему вы отмечаете мой вопрос минутами без комментариев? – Erik

+0

Я не знаю, почему это было занижено (я этого не сделал). Но не могли бы вы добавить код, чтобы показать, что вы пробовали? Конечно, нет автоматического способа «перемещать» элементы массива из одного документа в другой в MongoDB. – WiredPrairie

ответ

0

Я не думаю о каких-либо конкретных операторах для операции перемещения. Но, я думаю, вы могли бы использовать оператор $ push или $ addToSet для этой операции добавления, как показано ниже, а затем удалить эти элементы из 1 & 2 документа.

db.testcollection.update({_id:3}, {$addToSet:{ ... }}) 
0

Во-первых, вам нужно объяснить, почему вы хотите это сделать. Потому что вы хотите сделать, это просто этот оператор без добавления других операций, я задаюсь вопросом, самый простой способ это сделать так:

  1. получить результат от дб
  2. делать операцию, что вы хотите
  3. удалить старой записи и сохранить запись об изменении в db

хотя идея звучит как дурак, но это полезно. если у вас есть глубокие требования, пожалуйста, сообщите нам.

+0

Чтобы сделать это безопасно, мне нужно использовать что-то вроде транзакций – Erik

+0

@Erik Вы выбрали неверную базу данных, тогда MongoDB транзакционен только для одного документа, он находится в документации – Sammaye

+0

Могу ли я использовать TokuMX, который использует транзакции. Это что-то вроде InnoDB для MySQL – Erik

-1

использовать обновление() с $ заданной операции

db.test1.update({_id:1},{$set:{items:['1b']}}) 

это обновление установить ваш массив.

Спасибо,