c++ - 使用 C++ 驱动程序在 mongoDB 中使用 $elemMatch 投影查找查询

标签 c++ mongodb

我正在尝试使用 $elemMatch 和 mongoDB C++ 驱动程序 (2.6compat) 应用投影:

示例文档:

{ 
  "name" : "Tom",
  "lists" : [
             {"value" : 1}, {"value" : 2}, {"value" : 3}
            ]
}

我想为 Tom 获取一份文档,并且只有值 1。

在 shell 中,它看起来像这样:

> db.aaa.find({"name" : "Tom", "lists.value" : 1}, {"lists" : {$elemMatch : {"value" : 1} } })

现在,没有合适的方法覆盖 query 方法,该方法接受 BSONObj 作为查询的投影部分。我在这里遗漏了什么吗?

帮助将不胜感激!

最佳答案

您将要使用 DBClientBase::query() 方法。它有这个签名:

auto_ptr<DBClientCursor> DBClientBase::query(
    const string &ns,
    Query query,
    int nToReturn,
    int nToSkip,
    const BSONObj *fieldsToReturn,
    int queryOptions,
    int batchSize
)

在 2.6 兼容的 C++ 驱动程序中没有数据库或集合类,因此您需要提供:

  • 要查询的命名空间 (ns)
  • 查询本身(query)
  • 要返回的文件数量,
  • 要跳过的数字(默认值传递零)
  • fieldsToReturn(一个 BSONObj,表示您希望从数据库返回的字段。

因此,例如,如果您想执行与上述相同的操作,您可以这样编写查询:

DBClientConnection conn;
conn.connect("localhost:27017");
BSONOBj projection = fromjson("{ lists: {\"$elemMatch:\": {value: 1} } }");
conn.query("db.aaa", Query("{}"), 0, 0, &projection)

关于c++ - 使用 C++ 驱动程序在 mongoDB 中使用 $elemMatch 投影查找查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558316/

相关文章:

c++ - 带有 getline 的慢 istringstream

c++ - 是否可以将 C 风格的 api 回调/处理程序适应 C++ 以进行类相关的动态创建?

node.js - 查找具有与两个(或多个)属性均匹配的子文档的文档

c++ - 在 C++ 中的计算中无法获得正确答案

c++ - 如何从 QDateTime 生成 HTTP header If-Modified-Since 的时间戳?

C++初学者如何使用GetSystemTimeAsFileTime

mongodb - Doctrine ODM - 浮点字段不适用于小数字段

javascript - Mongoose - 设置关系在计划中失败

javascript - 在mongoDB中查询将字符串更改为整数需要很长时间

node.js - 无法读取未定义的属性 'ObjectID'