我想更新以下JSON文档的" user" -array,该文档保存在MongoDB数据库中(编程语言C ++)
{
"_id" : ObjectId("5ac4beacc0e2a512e6377d43"),
"document" : "test",
"user" : [
{
"email" : "a@gmail.com",
"username" : "Anton Held",
"job" : "",
},
{
"email" : "b@gmail.com",
"username" : "Benny Bill",
"job" : "IT-Officer",
},
{
"email" : "c@gmail.com",
"username" : "Conny Cenn",
"job" : "",
},
]
}
因此我使用此命令来获取此特定文档:
collection.update_one(document{} << "document" << "test"
<< finalize,
document{} << "$set" << open_document <<
(HOW TO DEAL?!) close_document << finalize);
我知道可以使用&#34; update_one&#34; -method更新文档(或类似的方法,例如&#34; replace_one&#34;,&#34; find_one_and_replace&#34;)。< / p>
但我不知道如何处理这些方法以更新现有用户的用户名&#34; email&#34; -element =&#34; a@gmail.com 34;或者我如何将用户添加到现有阵列&#34; user&#34;。
请帮帮我: - )
答案 0 :(得分:1)
所以你的问题归结为如何将这个mongo命令转换为C ++代码:
db.getCollection("testcollection").update(
{"document":"test", "user.email":"a@gmail.com"},
{"$set": {"user.$.username":"New Username"}}
)
这是它的样子。注意模式:
open_document
和close_document
进行嵌套{
和}
示例结果:
collection.update_one(
document{} << "document" << "test"
<< "user.email" << "a@gmail.com"
<< finalize,
document{} << "$set"
<< open_document
<< "user.$.username" << "New Username"
<< close_document << finalize
);
答案 1 :(得分:0)
正如 documentation 所说,您可以执行以下操作来添加新用户:
db.getCollection("testcollection").update(
{ "document": "test"},
{ "$push": {
"user": {
"username":"A new user in town ;)",
"email": "cooluser@gmail.com"
"job": "A cool job for a cool user"
}
}
}
)
在 mongodbcxx 中:
正如 @rustyx 提到的,您可以简单地将 {}
更改为打开/关闭文档并获得:
collection.update_one(
document{}
<< "document" << "test"
<< finalize,
document{}
<< "$push" << open_document
<< "user" << open_document
<< "username" << "A new user in town ;)"
<< "email" << "cooluser@gmail.com"
<< "job" << "A cool job for a cool user"
<< close_document
<< close_document
<< finalize
);
顺便说一句,我建议将“user”数组名称替换为“users”,因为它是用户数组而不是用户数组。
答案 2 :(得分:-1)
好的,这可以使用此命令,但我无法将其转换为C ++:
db.getCollection('testcollection').update({"document":"test",
"user.email":"a@gmail.com"}, {"$set":
{"user.$.username":"New Username"}})
请看一下我上一个例子,我试图找出如何使用email =“a@gmail.com”更新用户的这个特殊元素“username”:
collection.update_one(document{} << "document" << "test" << finalize,
document{} << "$set" << open_document <<
(HOW TO DEAL?!) close_document << finalize);