0

我在我的 mongo 组查询中遇到问题:(这是 PHP 代码)

$conditions = array(
                 'user' => array(
                      '$ne' => $uid
                 )
            );

            $group = $db->words->group(
                array("word" => true),
                array("count" => 0),
                "function(obj, prev) { prev.count += 1 }",
                $conditions
            );

想象一下单词集合中的以下文档

{
_id: 3,
word: "hello",
user: "test"
}
{
_id: 2,
word: "world",
user: ""
}
{
_id: 1,
word: "test",
user: ""
}

我需要从 group 命令返回的是:

{
    word: "world",
    count: 1
    }

我只需要在任何文档中都没有用户关联的单词。目前我得到:

{
    word: "test",
    count: 2
    }
{
    word: "world",
    count: 1
    }

这有意义吗?我还是从 mongo 开始...

谢谢

4

1 回答 1

1

我认为您不能直接在 group() 中过滤计数。

您需要将其过滤掉客户端。我怀疑这无论如何都是你想要的,因为你会希望以一种或另一种方式对计数进行排序(我知道我会的)。所以是的,你需要通过每个文档取出计数字段。

我相信聚合框架会更好:

http://docs.mongodb.org/manual/reference/aggregation/#_S_group

您可以将其用作管道,然后在 $sort 或其他任何内容之后替换另一个管道中的字段。

希望这可以帮助,

于 2012-06-29T08:13:23.080 回答