我正在尝试向BCON查询附加一个要求,其中&tribe_type'不等于' initial-public'。
我的原始代码是有效的:
query = BCON_NEW ("_id", BCON_OID(&oid));
当我添加第二部分时,它会编译,但mongo匹配失败。
query = BCON_NEW ("_id", BCON_OID(&oid),
"{",
"tribe_type",
"$ne",
"initial-public",
"}"
);
答案 0 :(得分:1)
您必须为UTF-8字符串指定BCON类型 小心暗示$和& 小心嵌套文档和BCON。
query = BCON_NEW ("_id", BCON_OID(&oid),
"{",
"tribe_type",
"$ne",
"initial-public",
"}"
);
编译成此命令
{ "_id" : <an oid> }, { "tribe_type" : "$ne" }
这显然不是你想要的。
显式使用$和操作,正确键入字符串作为UTF8字段,并确保捕获嵌套文档,如下所示:
query = BCON_NEW (
"$and", "[", "{", "_id", BCON_OID(&oid), "}",
"{", "tribe_type", "{", "$ne", BCON_UTF8 ("initial-public"), "}", "}","]"
);
产生一个类似于
的查询{ "$and" : [ { "_id" : <an oid> }, { "tribe_type" : { "$ne" : "initial-public" } } ] }
这可能是你想要的。
答案 1 :(得分:0)
query = BCON_NEW ("_id", BCON_OID(&oid),
"tribe_type",
"{",
"$ne", BCON_UTF8 ("initial-public"),
"}");