在我的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."
}
]
答案 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
}
}
})
上面的示例是针对名为“ blog.posts”的集合,而不是针对名为“ blog”的数据库和名称为“ posts”的集合。理想情况下,尽管问题中的点符号仍然有效,但集合名称不是valid JavaScript identifier的属性访问器应使用方括号。