【发布时间】:2014-02-17 13:03:20
【问题描述】:
我在 mongoDB 集合中有以下结构:
{
"_id" : ObjectId("5301d337fa46346a048b4567"),
"delivery_attempts" : {
"0" : {
"live_feed_id" : 107,
"remaining_attempts" : 2,
"delivered" : false,
"determined_status" : null,
"date" : 1392628536
}
}
}
// > db.lead.find({}, {delivery_attempts:1}).pretty();
我正在尝试从该集合中选择所有剩余尝试次数大于 0 且 live_feed_id 等于 107 的数据。请注意,“delivery_attempts”字段属于哈希类型。
我尝试在 elemMatch 中使用 addAnd(不确定这是否是实现此目的的正确方法)。
$qb = $this->dm->createQueryBuilder($this->getDocumentName());
$qb->expr()->field('delivery_attempts')
->elemMatch(
$qb->expr()
->field('remaining_attempts')->gt(0)
->addAnd($qb->expr()->field('live_feed_id')->equals(107))
);
我似乎确实得到了上面详述的记录。然而,改变大于 测试到 3
->field('remaining_attempts')->gt(3)
仍然返回记录(这是不正确的)。有没有办法做到这一点?
编辑:我已将 delivery_attempts 字段类型从“哈希”更新为“集合”。这表明数据被存储为数组而不是对象:
"delivery_attempts" : [
{
"live_feed_id" : 107,
"remaining_attempts" : 2,
"delivered" : false,
"determined_status" : null,
"date" : 1392648433
}
]
但是,原来的问题仍然适用。
【问题讨论】:
-
只是出于好奇,您所说的“请注意“delivery_attempts”字段属于哈希类型”是什么意思?我从未听说过哈希类型,只有哈希索引,非常感谢您参考文档,谢谢!编辑评论:哦,没关系,看起来它是学说中的一种类型,而不是 mongodb 本身。
标签: php mongodb doctrine doctrine-odm