Нажмите более одного массива в одном запросе Mongoskin

Я использую MongoDB с Mongoskin. У меня есть следующая структура данных:

clients: {
  firstArray: [
    {
      _id: '153'.
      someField1: 'someVal1',
      someField2: 'someVal2'
    }
    ...
  ]

  secondArray: [
    {
      _id: '7423'.
      someField1: 'someVal1',
      someField2: 'someVal2',
      firstArrayIds: ['153, 154, 155, ...']
    }
    ...
  ]
}

Возможно ли как-то $push объект firstArray и в том же запросе добавить _id к secondArray.firstArraysIds¨?


person Anders Östman    schedule 24.09.2014    source источник


Ответы (1)


Кто сказал, что ты не можешь этого сделать? Это довольно просто: $push является модификатором обновления «верхнего уровня» и, как таковой, принимает аргумент «уровень документа»:

db.collection.update(
    { "_id": someDocumentId, "secondArray._id": 7423 },
    {
       "$push": {
           "firstArray": someNewObject,
           "secondArray.$.firstArrayIds": someNewObject._id
       }
    }
);

Таким образом, оператор positional $ позволяет обновить элемент "secondArray ", что соответствовало вашему состоянию.

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

Но в том, что вы просите сделать, что требует только одного совпадения, тогда это нормально.

person Neil Lunn    schedule 24.09.2014
comment
Спасибо, Нил. Я ожидал, что ты сразу об этом узнаешь =) - person Anders Östman; 24.09.2014
comment
@AndersÖstman Большая часть причин, по которым я попал в stackoverflow в этом году, и, в основном, для предоставления разумных объяснений общих операций или даже сложных проблем, которые не были представлены ранее. Даже представили различные исправления документации, и, хотя они были хорошо приняты, в компании было принято решение нанять стажеров для повторной обработки документации более четкими примерами. Мех. Я предполагаю, что я должен вести блог больше действительно. - person Neil Lunn; 24.09.2014
comment
У меня было чувство, что у меня как-то должны быть проблемы с этим. См. этот вопрос: stackoverflow.com/questions/26165650/mongodb-pull-syntax. Я очень ценю всю вашу помощь! - person Anders Östman; 02.10.2014