Мангуст, как использовать позиционный оператор, чтобы извлечь из двойного вложенного массива с определенным условием, и вернуть новый результат - PullRequest
0 голосов
/ 04 декабря 2018

Предположим, у меня есть следующая схема:

{
  _id: ObjectId(1),
  title: string,
  answers: [
    {
      _id: ObjectId(2),
      text: string,
      upVotes: [
        {
           _id: ObjectId(3),
           userId: ObjectId(4)
        }
      ]
    }   
  ]
}

Что я хочу, это получить голосование определенного пользователя из ответов на ответ и вернуть новый результат обновления.Например, найдите вопрос с идентификатором 1 и получите его конкретный ответ с идентификатором 2, затем из этого ответа выведите мой голос, используя userId внутри upvotes.Я хочу сделать это с помощью одного findOneAndUpdate запроса

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы даже можете использовать один позиционный $ с оператором $pull для обновления вложенного массива

db.collection.findOneAndUpdate(
  { "_id": ObjectId(1), "answers._id": ObjectId(2) },
  { "$pull": { "answers.$.upVotes": { "userId": ObjectId(4) }}}
)
0 голосов
/ 04 декабря 2018

Мне кажется, я понял, что вы хотите выполнить поиск в определенном массиве

db.collection.update(

    { 
         "_id": "507f1f77bcf86cd799439011",  // id field
            "answers.upVotes._id":"507f1f77bcf86cd799439011" //id  array
    } 
    ),{
     "$set":{"answers.$.upVotes": {userId :"507f1f77bcf86cd799439011"}}},//edit

//use "addToSet" for add
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...