我正在尝试使用$ 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
。我在这里错过了什么吗?
非常感谢帮助!
答案 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 ++驱动程序中,没有数据库或集合类,因此您需要提供:
因此,例如,如果您想要执行与上面相同的操作,则可以像这样编写查询:
DBClientConnection conn;
conn.connect("localhost:27017");
BSONOBj projection = fromjson("{ lists: {\"$elemMatch:\": {value: 1} } }");
conn.query("db.aaa", Query("{}"), 0, 0, &projection)