【问题标题】:How do I update nested MongoDB object如何更新嵌套的 MongoDB 对象
【发布时间】:2021-01-23 03:22:30
【问题描述】:

我已经坚持了 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
}

【问题讨论】:

    标签: javascript database mongodb mongoose nosql


    【解决方案1】:

    我想通了...感谢 AlexisG 给我的线索,我需要一个 ObjectId 而不仅仅是 ObjectId 括号内的字符串 ID。

    解决办法是在js文件的开头声明: const ObjectId = require('mongodb').objectID

    然后在arrayFilters:[{"element._id": ObjectId(req.body.inputId)}]

    【讨论】:

      【解决方案2】:

      您的查询运行良好,请在此MongoPlayground 上尝试一下

      req.body.inputId 必须是 ObjectId 才能匹配 nouns 中的 _id

      【讨论】:

      • 它确实有效!我只有一个问题。如何将 ObjectId 放入字段中。控制台显示错误 ObjectId 未定义。当我调用 req.body.inputId 时,它只是 ObjectId 括号内的字符串。
      • 我想通了!我声明 const ObjectId = require('mongodb').objectID
      • 请同时提供代码和您的答案。共享的内容将来可能会消失。 “仅链接”的答案在这里不受欢迎。
      • 我的链接只是问题中给出的请求的复制/粘贴。我把它放在 MongoPlayground 上尝试查询,看看它正在工作
      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2021-02-13
      • 1970-01-01
      • 2018-11-07
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多