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."
}
]
解决方案
您拥有的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”的集合。理想情况下,括号应该用于集合名称不是有效 JavaScript 标识符的属性访问器,尽管问题中的点表示法仍然有效。
推荐阅读
- javascript - Amcharts4:在图例悬停时突出显示线条系列
- reactjs - 如何调用存储在变量中的子组件的 onClick 函数
- node.js - 如何在node express中获取mongodb的最后执行查询日志?
- android - how to get the data in this Api using retrofit in android
- bison - 我收到此消息“规则在语法中无用”
- angular - 错误:运行 Angular 应用程序时已加载 BrowserModule
- python - 如何分析 Python 数据流作业?
- azure - 如何在 Azure 数据工厂链接服务中为 Azure 表存储/blob 存储动态提供连接字符串
- java - 配置 spring 缓存咖啡因
- sapui5 - 使用 defaultOperationMode 客户端在 Smarttable 中包含过滤器