javascript - 如何更新嵌套的 MongoDB 对象
问题描述
我已经坚持了 6 个小时了......如何更新内部对象内部的字段和 MongoDB 中另一个对象内部的元素。
所以我有一组用户,每个用户都是一个包含对象数组的文档。这些对象具有我希望能够更改的字段。就像我只想更改“频率”和“状态”字段一样,但我只想更改“_id”等于查询的字段。
我试过了
db.collections.users.updateOne(
{},
{$set: {"nouns.$[element].status": 3}},
{multi: true,
arrayFilters: [{"element._id": req.body.inputId}]}
);
加上很多其他的东西。
{
"_id" : ObjectId("5f7d8490c1842471c6bcea42"),
"username" : "eric@mail.com",
"nouns" : [
{
"_id" : ObjectId("5f7d849cc1842471c6bcea43"),
"word" : "die Sonne",
"timeStamp" : ISODate("2020-10-07T09:04:28.436Z"),
"frequency" : 0,
"status" : 0
},
{
"_id" : ObjectId("5f7d84a8c1842471c6bcea45"),
"word" : "das Wetter",
"timeStamp" : ISODate("2020-10-07T09:04:40.940Z"),
"frequency" : 0,
"status" : 0
},
{
"_id" : ObjectId("5f7d84afc1842471c6bcea47"),
"word" : "der Apfel",
"timeStamp" : ISODate("2020-10-07T09:04:47.403Z"),
"frequency" : 0,
"status" : 0
},
{
"_id" : ObjectId("5f7d84b9c1842471c6bcea49"),
"word" : "das Maedchen",
"timeStamp" : ISODate("2020-10-07T09:04:57.388Z"),
"frequency" : 0,
"status" : 0
},
{
"_id" : ObjectId("5f7d84c8c1842471c6bcea4b"),
"word" : "das Auto",
"timeStamp" : ISODate("2020-10-07T09:05:12.036Z"),
"frequency" : 0,
"status" : 0
}
],
"verbs" : [],
"adjectives" : [],
"others" : [],
"salt" : "*****",
"hash" : "*****",
"__v" : 5
}
解决方案
我想通了...感谢 AlexisG 给我的线索,我需要一个 ObjectId 而不仅仅是来自 ObjectId 括号内的字符串 ID。
解决方案是在js文件开头声明: const ObjectId = require('mongodb').objectID
然后在 arrayFilters:[{"element._id": ObjectId(req.body.inputId)}]
推荐阅读
- http - 为什么我们不让 HTTP 请求更高效呢?
- vbscript - 从 HP ALM 测试计划下载所有附件
- flask - 烧瓶 filter_by table.column value1 或 value 3
- sql-server - 将 XML 记录转换为表
- rest - strust2 rest 插件和 Internet Explorer 的问题
- javascript - 属性值未传递给其他脚本中的变量
- django - Django开发服务器因错误而关闭
- wordpress - 网站地图最后阅读期
- firebase - 如何确保只获取 DB 中最近的 x 个帖子?
- python - 在子文件夹中导入多个 python 文件