使用C ++驱动程序在mongoDB中使用$ elemMatch进行查找查询

时间:2014-07-03 15:53:45

标签: c++ mongodb

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

示例文件:

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

我想为汤姆获取一份文件,而且只有1。

在shell中,这将是这样的:

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

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

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

您将要使用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)
  • 查询本身(查询)
  • 要返回的文件数量,
  • 要跳过的数字(默认值为零)
  • fieldsToReturn(BSONObj表示您希望从数据库返回的字段。

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

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