我在使用 MongoDB 进行高级计数查询时遇到问题。
我正在尝试计算文档字段中的对象,但前提是存在与查询匹配的先前元素并且在数组 中较旧。
让我解释....
我有一个容器文件,看起来像:
{
"_id" : ...,
[...]
"objects" : [ ]
}
在对象字段内:
我的对象文档看起来像:
[
{
"_id" : ...,
"name" : "foo",
"properties" = [ ],
"time" = 000000042
}
{
"_id" : ...,
"name" : "bar",
"properties" = [ ],
"time" = 000000424
}
{
"_id" : ...,
"name" : "baz",
"properties" = [ ],
"time" = 000004242
}
现在我计算有多少容器文档包含:带有对象 1 (foo)的容器
计数,带有对象 1 和 2(foo 和 bar)的容器
计数,带有对象 1、2 和 3 的容器计数(foo、bar、
baz )
但是现在我只想在bar 比foo旧时才计算foo 和 bar (使用时间字段)...带有对象 1 的容器计数(foo),带有对象 1 和 2 的容器计数(foo和bar),以及foo.time < bar.time包含对象 1、2 和 3 (foo, bar, baz) AND foo.time < bar.time < baz.time 的容器计数
问题是每个容器的时间字段都需要更改。换句话说:我如何使用每个文档的动态查询
这里有一个代码示例:
foreach ($COUNTER[ARRAY_FIELDS_NAME_TO_COUNT] as $key => $value)
{
// Build the query (Name & properties)
$match[$key] = array('$elemMatch' => array('name' => $value['name']));
foreach ($value['properties'] as $propertyName => $propertyValue)
$match[$key]['$elemMatch']["properties.$propertyName"] = $propertyValue;
// Time checking
if ($key > 0)
{
//FIXME with a... dynamics query searching inside current doc??
// or a special var set to the previous object matched... or MapReduce..
}
// Make the query
$query = array('objects' => array('$all' => $match));
$result[$key]['count'] = $db->person->count($query);
}
我是 MongoDB 的新手,我真的不知道什么是有效地做到这一点的最佳实践!
问候!