我正在尝试使用 $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/