Mongodb-逻辑运算符,例如“$lt"$lte”-但有一个是针对'=';以简化编程


Mongodb - logical operators e.g. "$lt" "$lte" - but is there one for '=' to simplify programming

Jimmy Sawczuk给了我很大的帮助,但也激励我研究"$in",因为它是一个等号'='运算符,但这可能是不可能的。。。

我有这个代码,我想做得更漂亮(知道它看起来很复杂(所以跳过它),但我很快就会说到点子上,然后它可能就没有那么复杂了:

// First html drop down selection / filter selection
if ($key[0] <> "") {
   if ($op[0] == "=") $query = array($key[0] => $val[0]);
   else $query = array( $key[0] => array( $op[0] => $val[0] ) );
}   
else return($query);
// Second html drop down selection / filter selection
if ($key[1] <> "") {
   if ($op[1] == "=")  $query = array( $log[0] => array( array($key[1] => $val[1]), $query));
   else $query = array( $log[0] => array( array( $key[1] => array( $op[1] => $val[1] ) ), $query) );
}   
else return($query);

我想做的是简化代码(为了简单起见,我合并了key0和key1行):

if ($key[1] <> "")  $query = array( $log[0] => array( array( $key[1] => array( $op[1] => $val[1] ) ), array( $key[0] => array( $op[0] => $val[0] ) )) );
$log: logical operater: "$and", "$or"
$key: key in database
$val: value to be matched against
$op:  operater e.g. "$lt", "$gt", "$lte", "$gte", "$ne" all supported by Mongo.

现在我的问题是,我想要一个$op,它是"$="或有点像$in。然而,$in似乎为多个值匹配相同的键,但在我的情况下,键可能不同。在mongo中有一个类似"$="的运算符将极大地简化我的编程。我已经读了好几篇教程,但找不到这样的运算符。我觉得奇怪的是,当你有$ne(不相等)时,为什么没有相等。我错过了什么吗,有没有解决办法(我现在做了解决办法,但看起来很难看)或者$=存在吗?

没有equal运算符。相反,MongoDB simple使用javascript冒号作为相等运算符。

所以{x : 1}意味着x equals 1。在PHP中,这将翻译array('x' => 1)

我觉得奇怪的是,当你有$ne(不相等)时,为什么没有相等。

是的,这确实很奇怪。事实上,这是一个长期悬而未决的bug。

CCD_ 5也存在类似的问题。在2.0之前的版本中,没有$and运算符。相反,您使用逗号{x:1, y:2}表示x equals 1 and y equals 2。这实际上使得使用$和/$或组合的某些查询变得非常困难。

从长远来看,我不希望这个错误被修复。它很可能会被新的聚合框架所取代,该框架实际上支持$eq运算符。

作为一个小提示,如果您真的需要模拟$eq,您可以使用:

{x: {$in: [1] } }

或者,无论出于何种原因,如果您想避免$in,这也适用:

{x: {$gte: 1, $lte: 1} }

任何大于或等于且小于或等于另一个值的值都必须等于另一值。这适用于字符串:

{x: {$gte: 'James Bond', $lte: 'James Bond' } }

它不适用于数组或对象。

Equality运算符$eq是在MongoDB 3.0中引入的。

http://docs.mongodb.org/manual/reference/operator/query/eq/

相关文章: