2017-02-14 30 views
1

我想追加一个需求到我的BCON查询中,'tribe_type'不等于'initial-public'。

我的原代码,并且工作:

query = BCON_NEW ("_id", BCON_OID(&oid)); 

当我添加的第二部分,它编译,但是蒙戈匹配失败。

 query = BCON_NEW ("_id", BCON_OID(&oid), 
      "{", 
       "tribe_type", 
       "$ne", 
       "initial-public", 
      "}" 
     ); 

回答

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" } } ] } 

这可能是你想要的。

+0

非常感谢您的解释。虽然我确实找出了一个解决方案,但你的解决方案更好,信息量更大。谢谢 :) –

0
 query = BCON_NEW ("_id", BCON_OID(&oid), 
      "tribe_type", 
       "{", 
        "$ne", BCON_UTF8 ("initial-public"), 
        "}"); 
+0

我想完了后发布了完整的工作代码。 –