【问题标题】:Pushing object to MongoDB array with NodeJS使用 NodeJS 将对象推送到 MongoDB 数组
【发布时间】:2022-01-02 11:52:50
【问题描述】:

这是我的 mongo 集合的示例:

{
   "data": {
      "categories": [
         {
            "categoryName":"Nature",
            "urls": [
               {
                  "name":"mountain",
                  "url":"mountain-url"
               }
            ]
         },
         {
            "categoryName":"Animals"
            "urls": [
               {
                  "name":"lion",
                  "url":"lion-url"
               }
            ]
         }
      ]
   }
}

我想将一个对象推送到 Nature 类别的 urls 数组中。 我试过这个:

collection.updateOne({"categories.$.categoryName":"Nature"},{$push:{"categories.$.urls":object}},(err, result) => {
    if (err) throw err;
    console.log('Successful');
  });

它返回“成功”,但 MongoDB 中没有任何变化。 我该怎么做?

【问题讨论】:

  • 尝试从查询部分中删除 $ { "categories.categoryName": "Nature" }
  • 我试过了,但没用。 @turivishal
  • 尝试将您的查询包装在异步函数中,并在查询await collection.updateOne之前放置等待,如果您已经使用过,请提供更多调试细节。

标签: node.js json mongodb


【解决方案1】:

我找到了我的问题的解决方案。这是更新代码:

 collection.updateOne({"data.categories.categoryName":"Nature"},{$push:{"data.categories.$.urls":object}},(err, result) => {
      if (err) throw err;
      console.log('Successful');
      });

【讨论】:

    【解决方案2】:

    使用 $set 而不是 $push

    试试这个 -

    collection.updateOne({"data.categories.categoryName":"Nature"},{$set:{"data.categories.urls":object}},(err, result) => {
    if (err) throw err;
    console.log('Successful');
    });
    

    【讨论】:

    • insertOne 将在根目录中插入新文档。并且 OP 希望将其插入现有文档中。
    • 那是我使用的 data.categories。
    • 阅读insertOne的这份文件。 insertOne 不更新文档。
    • 开发者没有更新,而是插入一个或多个完整的对象。请在此之前进行验证。
    • 它应该是 $set 而不是 $push
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2020-05-21
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多