Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB C++;更新数组中的元素 我对MangGDB和C++很陌生。 我的问题:我想更新数据库集合中的JSON文档: { "_id" : ObjectId("5ac4beacc0e2a512e6377d43"), "docID" : "SL/UO4ZJgdUxcRLKxXDWMg==", "docVersion" : "DA3EF8047AD0F[…]77C6F9286488CEE6a", "userID" : "bob@nds-local", "parts" : [ { "partID" : "u2v[…]0KG7R", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { "everyone" : [ 1, 0, 0, 0, 0, 0, 0, 0, 0 ] } }, { "partID" : "AZ3[…]1Odeku", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { } } ] }_C++_Mongodb_Mongodb Query_Mongo Cxx Driver - Fatal编程技术网

MongoDB C++;更新数组中的元素 我对MangGDB和C++很陌生。 我的问题:我想更新数据库集合中的JSON文档: { "_id" : ObjectId("5ac4beacc0e2a512e6377d43"), "docID" : "SL/UO4ZJgdUxcRLKxXDWMg==", "docVersion" : "DA3EF8047AD0F[…]77C6F9286488CEE6a", "userID" : "bob@nds-local", "parts" : [ { "partID" : "u2v[…]0KG7R", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { "everyone" : [ 1, 0, 0, 0, 0, 0, 0, 0, 0 ] } }, { "partID" : "AZ3[…]1Odeku", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { } } ] }

MongoDB C++;更新数组中的元素 我对MangGDB和C++很陌生。 我的问题:我想更新数据库集合中的JSON文档: { "_id" : ObjectId("5ac4beacc0e2a512e6377d43"), "docID" : "SL/UO4ZJgdUxcRLKxXDWMg==", "docVersion" : "DA3EF8047AD0F[…]77C6F9286488CEE6a", "userID" : "bob@nds-local", "parts" : [ { "partID" : "u2v[…]0KG7R", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { "everyone" : [ 1, 0, 0, 0, 0, 0, 0, 0, 0 ] } }, { "partID" : "AZ3[…]1Odeku", "partVersion" : "", "partKey" : "", "docPosition" : 0, "counter" : 0, "users" : { } } ] },c++,mongodb,mongodb-query,mongo-cxx-driver,C++,Mongodb,Mongodb Query,Mongo Cxx Driver,首先,我想从我的数据库中获取此文档。因此,我使用以下小代码: bsoncxx::stdx::optional<bsoncxx::document::value> resultDocument = collection.find_one(document{} << "docID" << docID << finalize); bsoncxx::stdx::可选结果文档= collection.find_one(documen

首先,我想从我的数据库中获取此文档。因此,我使用以下小代码:

bsoncxx::stdx::optional<bsoncxx::document::value> resultDocument =
            collection.find_one(document{} << "docID" << docID << finalize);
bsoncxx::stdx::可选结果文档=

collection.find_one(document{}不需要从数据库检索文档,您可以一次性更新文档

您还需要使用:
parts.partID
在查询中添加
partID
字段,以查找数组中的匹配项

要更新您请求的字段(1)并在
用户中添加新键(2),您需要使用,因为它将允许访问与查询匹配的元素

它看起来是这样的:

db[“docs”]更新一次(
制作文档(
kvp(“文档ID”,文档ID),
kvp(“parts.partID”,partID)
),
制作文档(
kvp(“$set”),生成文档(
kvp(“零件$.partKey”,新零件键),
kvp(“parts.$.partVersion”,新partVersion),
kvp(“零件$.docPosition”,新docPosition),
kvp(“parts.$.users.”+新用户,make_数组(1,2,3,4,5))
)
)
)
);
kvp(“parts.$.users.”+newUser,make_数组(1,2,3,4,5))
将在
users
内部创建一个键,该键的值为
newUser
变量,它将包含数组
[1,2,3,4,5]

可以使用
$unset
操作符以类似的方式删除用户(2):

db[“docs”]更新一次(
制作文档(
kvp(“文档ID”,文档ID),
kvp(“parts.partID”,partID)
),
制作文档(
kvp(“$unset”,make_文档(kvp(“parts.$.users.”+userToDelete,”))
)
);
如何操作一个特定用户(2)的数组将取决于您计划更新它的内容/方式,但为此,您可以使用


以下代码段:

  • 首先,它更新
    partKey
    partVersion
    docPosition
    字段,并在
    partID:“AZ3[…]1Odeku”
    part
  • 第二,它删除先前添加的用户
  • 请注意,我已将您文档数据中的三个点替换为省略号
    ,因为这导致mongocxx驱动程序即使在查询中也使用省略号,也无法找到任何匹配项(在mongo shell中工作正常)

    #包括
    #包括
    #包括
    #包括
    #包括
    使用bsoncxx::builder::basic::kvp;
    使用bsoncxx::builder::basic::make\u数组;
    使用bsoncxx::builder::basic::make\u文档;
    void updatePartAndAddNewUser(const mongocxx::客户端和客户端,
    常量标准::字符串和文档ID,
    const std::string和partID,
    const std::string和newPartKey,
    const std::string和newPartVersion,
    内特纽多克酒店,
    const std::string和newUser)
    {
    mongocxx::数据库db=client[“stack”];
    db[“文档”]。更新一个(
    制作文档(
    kvp(“文档ID”,文档ID),
    kvp(“parts.partID”,partID)
    ),
    制作文档(
    kvp(“$set”),生成文档(
    kvp(“零件$.partKey”,新零件键),
    kvp(“parts.$.partVersion”,新partVersion),
    kvp(“零件$.docPosition”,新docPosition),
    kvp(“parts.$.users.”+新用户,make_数组(1,2,3,4,5))
    )
    )
    )
    );
    }
    void removeUserFromPart(const mongocxx::客户端和客户端,
    常量标准::字符串和文档ID,
    const std::string和partID,
    常量std::string和userToDelete)
    {
    mongocxx::数据库db=client[“stack”];
    db[“文档”]。更新一个(
    制作文档(
    kvp(“文档ID”,文档ID),
    kvp(“parts.partID”,partID)
    ),
    制作文档(
    kvp(“$unset”,make_文档(kvp(“parts.$.users.”+userToDelete,”))
    )
    );
    }
    int main(int,char**)
    {
    标准::cout
    
    collection.update_one(document{} << "docID" << docID
                                         << "docVersion" << docVersion
                                         << finalize,
                              document{} << "$set" << open_document <<
                                         "userID" << "oscar@nds-local" << close_document << finalize);
    
    {
            "_id" : ObjectId("5ac4beacc0e2a512e6377d43"),
            "docID" : "SL/UO4ZJgdUxcRLKxXDWMg==",
            "docVersion" : "DA3EF8047AD0F[...]77C6F9286488CEE6a",
            "userID" : "bob@nds-local",
            "parts" : [
                    {
                            "partID" : "u2v[...]0KG7R",
                            "partVersion" : "",
                            "partKey" : "",
                            "docPosition" : 0,
                            "counter" : 0,
                            "users" : {
                                    "everyone" : [1,0,0,0,0,0,0,0,0]
                            }
                    },
                    {
                            "partID" : "AZ3[...]1Odeku",
                            "partVersion" : "newPartVersion1",
                            "partKey" : "newPartKey",
                            "docPosition" : 1,
                            "counter" : 0,
                            "users" : {
                                    "nobody" : [1,2,3,4,5]
                            }
                    }
            ]
    }