PHP:具有位置运算符

时间:2017-07-12 14:18:24

标签: php arrays mongodb embedded-documents

我想从匹配基础上的嵌入文档中检索特定数组,但是输出显示该文档中的所有数组不是特定数组或只显示第一个数组.... 这是我的代码请看看并根据PHP回答这个问题。

$dept->findOne(['$and' => [
    ['_id' => 'd004'],
    ['dept_employees.from_date' => '1986-12-01'],
    ['dept_employees.to_date' => '9999-01-01']
                         ]
    ],
    ['projection' => ['dept_employees.$' => 1] ]);

这是输出

MongoDB\Model\BSONDocument::__set_state(array(
   '_id' => 'd004',
   'dept_employees' => 
  MongoDB\Model\BSONArray::__set_state(array(
     0 => 
    MongoDB\Model\BSONDocument::__set_state(array(
       'emp_id' => '10003',
       'from_date' => '1995-12-03',
       'to_date' => '9999-01-01',
    )),
  )),
))

文件就像这样有247个子阵列

MongoDB\Model\BSONDocument::__set_state(array(
   '_id' => 'd004',
   'dept_employees' => 
  MongoDB\Model\BSONArray::__set_state(array(
     0 => 
    MongoDB\Model\BSONDocument::__set_state(array(
       'emp_id' => '10003',
       'from_date' => '1995-12-03',
       'to_date' => '9999-01-01',
    )),
     1 => 
    MongoDB\Model\BSONDocument::__set_state(array(
       'emp_id' => '10004',
       'from_date' => '1986-12-01',
       'to_date' => '9999-01-01',
    )),
     2 => 
    MongoDB\Model\BSONDocument::__set_state(array(
       'emp_id' => '10010',
       'from_date' => '1996-11-24',
       'to_date' => '2000-06-26',
    )),

我只想要这个

MongoDB\Model\BSONDocument::__set_state(array(
   '_id' => 'd004',
   'dept_employees' => 
  MongoDB\Model\BSONArray::__set_state(array(

     1 => 
    MongoDB\Model\BSONDocument::__set_state(array(
       'emp_id' => '10004',
       'from_date' => '1986-12-01',
       'to_date' => '9999-01-01',
    )),

日期仅作为字符串,我只是匹配字符串。 shell也显示相同的结果:

db.departments.find( {"dept_employees.from_date": '1986-12-01',    
"dept_employees.to_date": '9999-01-01'}, {"dept_employees.$":1} ).pretty()
{
        "_id" : "d004",
        "dept_employees" : [
                {
                        "emp_id" : "10003",
                        "from_date" : "1995-12-03",
                        "to_date" : "9999-01-01"
                }
        ]
}

1 个答案:

答案 0 :(得分:0)

根据MongoDB文档:

  

位置$运算符限制了a的内容   查询结果只包含与查询匹配的第一个元素   文档。

和:

  

请参阅聚合运算符$ filter以返回仅包含这些数组的数组   符合指定条件的元素。

https://docs.mongodb.com/manual/reference/operator/projection/positional/

https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#exp._S_filter

此外,在您的情况下并不完全确定,但如果您希望匹配日期范围,可能使用' $ gt'和' $ lt'可以帮助。