javascript - MongoError:不能使用part()遍历元素
问题描述
我在 StackOverflow 上看到过类似的帖子,但谈论的是我已经完成的解决方案。
这是数据集:
代码片段:
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>]
,同样可以用于过滤数组。
解决方案
推荐阅读
- c# - 如何计算金额的间接费用
- javascript - 如何将事件从父级传递给子级以与功能组件做出反应?
- pouchdb - PouchDB 强制更新
- bash - 将格式化的日期行输出打印到 Bash 脚本中的文件
- javascript - 在 Node 中使用 googleapis 包交换访问令牌的授权码
- android - Xamarin Android:当ai点击recyclerview项目时如何从mainactivity中隐藏项目
- ios - 设置不同颜色的 UISlider 角的 setMinimumTrackImage
- python - 创建一对/一组元组并删除某些元素
- javascript - 使用 jquery(或 vanilla JS)在页面加载时格式化表格中的数字
- sql - DB2 字符转换