MongoError: нельзя использовать part () для прохождения элемента - PullRequest
1 голос
/ 09 ноября 2019

Я видел похожие посты в StackOverflow, но это говорит о решении, которое я уже сделал.

Вот набор данных:

enter image description here

Фрагмент кода:

let arrayFilters = [];
updateQuery = {};
if (value.messages && value.messages.length > 0) {

    updateQuery['$set'] = {
        'messages.$[el].read_receipt.receiver' : true
    };

    if (recipient.individual) {
        arrayFilters.push({
            'el.sender_party.individual': recipient.individual
        });
    } else {
        arrayFilters.push({
            'el.sender_party.shop': recipient.shop
        });
    }
}

console.log("Update Query",updateQuery)
console.log("Array Filter", arrayFilters)

await db.collection('chatrooms').findOneAndUpdate(filterQuery, updateQuery, {
    upsert: false,
    returnOriginal: false,
    arrayFilters: arrayFilters,
    multi: true
}).then(a => {
    console.log("data",a.value)
}).catch(reason => {
    console.log("reason",reason)
})

В журнале консоли я получаю следующее

Update Query { '$set': { 'messages.$[el].read_receipt.receiver': true } }
Array Filter [ { 'el.sender_party.individual': 'W3cBY1cIzJdTkbIHLwkaxGHm3dWMR0OG' } ]

Стек ошибок:

reason { MongoError: cannot use the part (messages of messages.$[el].read_receipt.receiver) to traverse the element ({messages: [ { Id: "iZ-PH7nnD", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573286757002", date_updated: "1573286757002", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "UjbiRgHXJ", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573286954329", date_updated: "1573286954329", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "Cc17qxXAm", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287264379", date_updated: "1573287264379", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "qa-g6lCPp", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287614845", date_updated: "1573287614846", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "U9MwvR778", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287647839", date_updated: "1573287647839", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "fGrTcOYOd", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287805560", date_updated: "1573287805560", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "S9ARpxrXq", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287855475", date_updated: "1573287855475", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } }, { Id: "g1mQvA82P", sender: "4P0qSVML32lkxuKnGcjR4acLMr2FE8q7", read_receipt: { sender: true, receiver: false }, date_added: "1573287964177", date_updated: "1573287964177", type: "text", message: "Yes, please", sender_party: { shop: "RjWDlxiookcUOopfXtqZ1okrg3mpSFdz" } } ]})
    at Connection.<anonymous> (/Volumes/.../...-alt/Bitbucket/.../nodejs-backend/node_modules/mongodb/lib/core/connection/pool.js:466:61)
    at Connection.emit (events.js:182:13)
    at Connection.EventEmitter.emit (domain.js:441:20)
    at processMessage (/Volumes/...-SD/...-alt/Bitbucket/.../nodejs-backend/node_modules/mongodb/lib/core/connection/connection.js:364:10)
    at Socket.<anonymous> (/Volumes/...-SD/...-alt/Bitbucket/.../nodejs-backend/node_modules/mongodb/lib/core/connection/connection.js:533:15)
    at Socket.emit (events.js:182:13)
    at Socket.EventEmitter.emit (domain.js:441:20)
    at addChunk (_stream_readable.js:287:12)
    at readableAddChunk (_stream_readable.js:268:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
  ok: 0,
  errmsg:
   '... displayed above ...',
  code: 16837,
  codeName: 'Location16837',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {} }

Поле сообщения, следовательно, является массивомЯ не понимаю, почему он не может пройти. Согласно документации MongoDB $[<identifier>] будет использоваться для массива, и то же самое может использоваться для фильтрации массива.

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