我想制作以下SQL代码的等价物:
SELECT * FROM pattern_object_values WHERE (pattern_object_id=1 && value>1977 &&
value<1986)
|| (pattern_object_id=2 && value>5000 &&
value<950000);
MongoDB查询:
$mongoDB->find(array('$or'=>
array(
array(
'$and'=>array(
array('pattern_object_id'=>1),
array('value'=>array('$gte'=>1977,'$lte'=>1986))
)
)
),array(
array(
'$and'=>array(
array('pattern_object_id'=>2),
array('value'=>array('$gte'=>5000,'$lte'=>95000))
)
)
)
));
你能帮帮我吗?
答案 0 :(得分:0)
无需在您的mongo查询中使用$and
运算符,因为来自 docs :
MongoDB在指定逗号时提供隐式AND操作 分隔的表达式列表。使用显式AND与$和 当相同的字段或操作符必须时,操作符是必需的 在多个表达式中指定。
因此这个SQL表达式:
SELECT *
FROM pattern_object_values
WHERE
(pattern_object_id = 1 && value > 1977 && value < 1986 )
|| (pattern_object_id = 2 && value > 5000 && value < 950000 );
具有等效的MongoDB:
db.pattern_object_values.find({
$or: [
{
'pattern_object_id': 1,
{
'value': { '$gt': 1977, '$lt': 1986 }
}
},
{
'pattern_object_id': 2,
{
'value': { '$gt': 5000, '$lt': 950000 }
}
}
]
});
然后您可以转换为PHP等效(未经测试)
db->pattern_object_values
->find(array('$or' => array(
array(
array('pattern_object_id' => 1),
array('value' => array('$gt' => 1977, '$lt' => 1986)
),
array(
array('pattern_object_id' => 1),
array('value' => array('$gt' => 5000, '$lt' => 950000 )
)
)
)
);