find中的ObjectID的Mongocxx数组

时间:2017-05-03 21:13:23

标签: mongodb mongo-cxx-driver

我尝试使用mongocxx驱动程序填充C ++查询。

Javascript中的查询就像:

{unit_id: {$in: [ObjectId('58aee90fefb6f7d46d26de72'),
                ObjectId('58aee90fefb6f7d46d26de73']
          }
}

我认为以下代码可以生成数组部分,但它没有编译。

#include <cstdint>
#include <iostream>
#include <vector>
#include <bsoncxx/json.hpp>
#include <bsoncxx/types.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
#include <mongocxx/instance.hpp>

using bsoncxx::builder::stream::close_array;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::finalize;
using bsoncxx::builder::stream::open_array;
using bsoncxx::builder::stream::open_document;

mongocxx::instance instance {};
mongocxx::client client{mongocxx::uri{}};
mongocxx::database db = client["banff_development"];
mongocxx::collection coll = db["units"];

int main()
{
    mongocxx::cursor cursor = coll.find
 (document{} << "provider_id" << bsoncxx::oid("58aee90fefb6f7d46d26de4a") 
 <<  finalize);
    bsoncxx::builder::stream::document unit_filter_builder;
    for (auto a: cursor)
    {
        unit_filter_builder << a["_id"].get_oid();
    }
    return 0;
}

在哪里可以找到使用ObjectId数组进行过滤的查询的工作示例。

1 个答案:

答案 0 :(得分:2)

要构建阵列,您需要使用阵列构建器,而不是文档构建器。数组的构建器声明应为bsoncxx::builder::stream::array unit_filter_builder。看起来您还缺少各种流构建器类型的几个包含。

顺便说一下,最好避开流构建器,因为在使用它时很容易遇到问题。 Thisthis是正确使用流构建器的棘手问题的好例子。您可以使用基本构建器,而不是使用流构建器,该构建器具有更简单的实现,并且如果您犯了错误,则会为您提供更加安全的错误消息。