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: ""
}

グループコマンドから返される必要があったのは次のとおりです。

{
    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 に答える