Mongodb 如何在嵌入对象的数组中查询值?
我有一个包含以下对象的集合:Mongodb 如何在嵌入对象的数组中查询值?,mongodb,doctrine,Mongodb,Doctrine,我有一个包含以下对象的集合: { id => ... [queue] => Array ( [jobs] => Array ( [0] => Array ( [_id] => 308 [completedDate] => 1324649528
{
id => ...
[queue] => Array
(
[jobs] => Array
(
[0] => Array
(
[_id] => 308
[completedDate] => 1324649528
)
)
[1] => Array
(
[_id] => 308
[completedDate] => 1324649512
)
)
)
}
因此,基本上我有一个包含对象的集合,每个对象都有一个嵌入式(EmbedOne
)文档队列
。
此队列
文档还包含作业
嵌入文档的集合(@EmbedMany
)
我要查询作业已完成的文档:
db.Page.find({"queue.jobs.completedDate": { $ne : null} }).limit(10);
我使用doctrine2odm(1.0.0beta3)执行此查询
但它什么也没回来,我错过了什么
编辑:这是队列文档:
/**
* @EmbeddedDocument
*/
class Queue {
/** @Boolean */
private $locked = false;
/** @Timestamp */
private $lockedAt;
/** @EmbedMany(targetDocument="Cron\Model\Document\Job") */
private $jobs = array();
//...setters & getters
}
使用下面的代码(2.0.2)在shell上工作 find({“queue.jobs.completedDate”:{$ne:null}).limit(10)
队列应该是散列,因为它具有“jobs”键。您的日期似乎没有正确存储。确保通过shell在数据库中显示的文档与您期望的一样。我选择将日期存储为Int。队列对象是一个
@EmbeddedDocument
/**
* @EmbeddedDocument
*/
class Queue {
/** @Boolean */
private $locked = false;
/** @Timestamp */
private $lockedAt;
/** @EmbedMany(targetDocument="Cron\Model\Document\Job") */
private $jobs = array();
//...setters & getters
}
db.Page.insert({
"queue": {
"jobs": [
{
"_id": ObjectId(),
"completedDate": ISODate()
},
{
"_id": ObjectId(),
"completedDate": ISODate()
}
]}
})
{ "_id" : ObjectId("4ef49ebe093f0426a41ec640"),
"queue" : {
"jobs" : [
{
"_id" : ObjectId("4ef49ebe093f0426a41ec63e"),
"completedDate" : ISODate("2011-12-23T15:31:10.881Z")
},
{
"_id" : ObjectId("4ef49ebe093f0426a41ec63f"),
"completedDate" : ISODate("2011-12-23T15:31:10.881Z")
}
]
}
}