как сделать sh объект, кроме дубликата объекта в mongoDB - PullRequest
0 голосов
/ 06 марта 2020

Я хочу добавить объект в массив. Но я хочу удалить дубликаты объектов.

вот mongoDB JSON

{
    "_id" : ObjectId("5e61ef7e003307047c13329d"),
    "subject" : "Grammar",
    "deletedYn" : false,
    "answerList" : [ 
        {
            "_id" : ObjectId("5e61ef8c003307047c1332a4"),
            "sentence" : "hi gui, nice to meet you",
            "answer" : [ 
                {
                    "_id" : ObjectId("5e61f15cd863e104a8f66770"),
                    "word" : "nice",
                    "index" : 3
                }
            ]
        }, 
        {
            "_id" : ObjectId("5e61ef8c003307047c1332a5"),
            "sentence" : "how to make a project.",
            "answer" : []
        }
    ],
    "passageId" : "123",
}

Так что я хочу pu sh ответить в answerList. Ниже приведен код, который я создал, но он содержит дубликаты объектов.

        const update = await PassageGrammar.updateOne(
          {
            _id: passageGrammarId,
            answerList: { $elemMatch: { _id: sentenceId } },
          },
          {
            $addToSet: {
              'answerList.$.answer': {
                word: answerList.word,
                index: answerList.index,
              },
            },
          },
        );

, но он не работает (у него есть дубликат) так:

            "answer" : [ 
                {
                    "_id" : ObjectId("5e61f15cd863e104a8f66770"),
                    "word" : "nice",
                    "index" : 3
                },
               {
                    "_id" : ObjectId("5e61f15cd863e104a8f66770"),
                    "word" : "nice",
                    "index" : 3
                }
            ]

Как я могу его изменить

1 Ответ

0 голосов
/ 06 марта 2020

Попробуйте каждый раз создавать уникальный индекс и удалять дубликаты, если они существуют

    const update = await PassageGrammar.updateOne(
          {
            _id: passageGrammarId,
            answerList: { $elemMatch: { _id: sentenceId } },
          },
          {
            $addToSet: {
              'answerList.$.answer': {
                word: answerList.word,
                index: answerList.index,
              },
            },
          },
          { unique:true, dropDups:true } 
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...