添加多个键/值

时间:2019-06-03 12:49:14

标签: mongodb

在我的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."
    }
]

1 个答案:

答案 0 :(得分:1)

您已经使用的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
    }
  }
})

Docs for $set
Docs for $push

上面的示例是针对名为“ blog.posts”的集合,而不是针对名为“ blog”的数据库和名称为“ posts”的集合。理想情况下,尽管问题中的点符号仍然有效,但集合名称不是valid JavaScript identifier的属性访问器应使用方括号。