我在MongoDB中有一个名为shop的集合
shop{
"_id" : "523c1e",
"address" : "100, University Road",
"city" : "xyz",
"contact_name" : "John",
"deals" : [
{
"deal_id" : "524913",
"deal_type" : "Sale",
"deal_description" : "Very good deal",
"start_date" : "2013-09-12",
"end_date" : "2013-09-31"
},
{
"deal_id" : "52491abf6",
"deal_type" : "Sale",
"deal_description" : "Buy 2 jeans, get one free",
"start_date" : "2013-09-20",
"end_date" : "2013-10-31"
}
],
}
我想使用mongodb和php查找正在运行的交易(当前日期为'2013-10-01')和_id =“ 523c1e”,
所以我会得到,
{
"deal_id" : "52491abf6",
"deal_type" : "Sale",
"deal_description" : "Buy 2 jeans, get one free",
"start_date" : "2013-09-20",
"end_date" : "2013-10-31"
}
请帮助我纠正此查询,
我正在尝试这个但没有给出任何输出
<?php
date_default_timezone_set('Asia/Kolkata');
$date=date('Y-m-d');
$pro_id='523c1e';
$cursor = $collection->find(array("_id" => "$pro_id",$date => array('$gt' => 'deals.start_date','$lte' => 'deals.end_date')),array("deals" => 1));
foreach($cursor as $document)
{
echo json_encode(array('posts'=>$document));
}
?>
请帮我...
如果我对问题的理解正确,那么您正在尝试仅返回与搜索条件匹配的子文档?
这是通过在投影中使用位置$运算符完成的。
$criteria = array("some.nested.structure" => 42);
$project = array("some.$.structure" => 1);
$collection->find($criteria, $project);
对于您的情况,将类似于:
$criteria = array(
"_id" => $pro_id,
"deals.start_date" => array('$lte' => $date),
"deals.end_date" => array('$gt' => $date)
);
$project = array("deals.$" => 1);
$cursor = $collection->find($criteria, $project);
请注意,您的搜索查询是错误的。您不能说value => array(operator => fieldname),那就不是MongoDB语法。有关如何使用$ lt运算符的示例,请参见http://docs.mongodb.org/v2.2/reference/operator/query/lt/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句