首页 > 解决方案 > 添加多个键/值

问题描述

在我的 database.collection 即 db.blog.posts 中,我试图添加一个本身具有多个键和值的键和值。

当前收藏:

db.blog.posts.findOne()
"title":"blog posts"

我尝试使用 $set, $push 但似乎没有任何效果。

当我尝试添加单个集合时,这也不起作用:

db.blog.posts.updateOne({"title":"blog posts"}, {"$set":{"comments":[{"comment":"good post", "author":"john","votes":0}]}})

也不是 insertOne 而不是 updateOne 我什至尝试过:

var myEmployee=[
{"comment":"good post", "author":"john", "votes":0},
{"comment":"i thought it was too short", "author":"claire","votes":3},
{"comment":"free watches", "author":"claire","votes":-1},
];
db.blog.posts.insert(myEmployee)

这就是我要的:

"title" : "A blog post",
"comments" : [
    {
        "name" : "joe",
        "email" : "joe@example.com",
        "content" : "nice post."
    },
    {
        "name" : "bob",
        "email" : "bob@example.com",
        "content" : "good post."
    }
]

标签: mongodb

解决方案


您拥有的updateOne命令应该已经为带有单个条目的注释创建了一个数组。如果您想要多个条目,您可以在更新中将多个对象添加到数组中。操作员会将键的$set值更改为您设置为第二个参数的值。

db['blog.posts'].updateOne({"title":"blog posts"}, {
  "$set": {
    "comments":[
      {
        "name" : "joe",
        "email" : "joe@example.com",
        "content" : "nice post."
      },
      {
        "name" : "bob",
        "email" : "bob@example.com",
        "content" : "good post."
      }
    ]
  }
})

如果您想在评论中添加其他项目,可以使用$push. $push运算符添加到数组中。

db['blog.posts'].updateOne({"title":"blog posts"}, {
  "$push": {
    "comments": {
      "comment": "good post",
      "author": "john",
      "votes": 0
    }
  }
})

$set
文档 $push 文档

注意上面的例子是针对一个名为“blog.posts”的集合,而不是一个名为“blog”的数据库和一个名为“posts”的集合。理想情况下,括号应该用于集合名称不是有效 JavaScript 标识符的属性访问器,尽管问题中的点表示法仍然有效。


推荐阅读