我正从MongoDB中检索Lithium中的DocumentSet,但我不想一次处理所有文档。相反,我希望有一个过滤器,我可以这样说:
$manyDocuments->giveMeTheOneWhere(array('foo' => 'bar'));
我已经尝试过这种方式,但它不起作用:
$manyDocuments->find(function($singleDocument){
return ($singleDocument->foo == 'bar');
});
即使我在闭包内手动返回true,它也总是返回一个空的DocumentSet。
只是为了增加清晰度:我不是在寻找数据库操作,而是想从已经存在的DocumentSet中获取一个。是否有一种奇特的方法来实现这一点,还是需要使用自定义函数迭代整个集合?
答案 0 :(得分:2)
这对我来说是对的。这是您正在使用的完全代码吗?
例如,您正在使用传入的内容的“条形”值是什么?
答案 1 :(得分:1)
我正在使用Lithium的最新分支机构并编写了这个适用于我的单元测试。我不确定你为什么要得到一个空的DocumentSet。
$docs = new DocumentSet(array('data' => array(
new Document(array('data' => array(
'id' => 1,
'foo' => 'bar'
))),
new Document(array('data' => array(
'id' => 2,
'foo' => 'baz'
))),
new Document(array('data' => array(
'id' => 3,
'foo' => 'bar'
))),
new Document(array('data' => array(
'id' => 4,
'blah' => 'ack'
)))
)));
$filtered = $docs->find(function($doc) {
return $doc->foo === 'bar';
});
$expected = array(
'0' => array('id' => 1, 'foo' => 'bar'),
'2' => array('id' => 3, 'foo' => 'bar')
);
$this->assertIdentical($expected, $filtered->data());
答案 2 :(得分:0)
我没有使用find()
而是使用first()
来封闭。这按预期工作。可悲的是,这是我以前唯一没有尝试过的事情。对不起回答我自己的问题。
无论如何,我仍然对获取另一个文档设置的方式感兴趣。