【发布时间】:2015-09-30 07:46:42
【问题描述】:
我有这种结构的 MongoDB 文档:
{
_id: 1
dates: [
ISODate ("2015-08-21T22: 00: 00Z")
ISODate ("2015-09-27T22: 00: 00Z")
],
...
}
在我的示例中,我们看到文档 1 被访问:
- 2015-08-21
- 2015-09-27
在我的应用程序中,我可以按时间段(开始日期、结束日期)进行过滤。
如果在我的应用程序中过滤“2015-09-01 - 2015-09-01”期间:
从逻辑上讲,应该找不到文档 1,因为在此期间没有查阅过它。但是通过我的测试,找到了文档 1。
我必须使用什么条件才能正确过滤数据?
我试过了,但很容易出错:
<?php
$begin = new \DateTime('2015-09-01');
$end = new \DateTime('2015-09-01');
$expr1 = $qb->expr()->field('dates')->gte($begin);
$expr2 = $qb->expr()->field('dates')->lte($end);
$qb
->addAnd($expr1)
->addAnd($expr2)
;
感谢您的帮助, 约汉
【问题讨论】:
-
如果您希望单独测试每个数组元素,那么您需要
$elemMatch。不确定教义语法,现在没有任何东西可以测试。但这应该给你一个指针。还正确标记了您的问题,以使其对合适的人可见。
标签: php mongodb mongodb-query doctrine-odm