4

MongoDBクエリでfieldValue.contains( "someString")検索を実装する必要がありますか?

私が見つけた解決策は

db.main.find(  { $where: "this.content.indexOf('someString') != -1" } );

そしてそれは検索機能のためにうまく働きます。

しかし、集計関数で同じことをすると

db.foo.aggregate(
    {
        $match: 
                { $where: "this.content.indexOf('someString') != -1" }
    },
    {
        $project :
                {
                    _id : 1,
                    words : 1
                }
    },
    {
        $unwind : "$words"
    },
    {
        $group : {
                    _id : { tags : "$words" },
                    count : { $sum : 1 }
                }
    },
    {
        $sort: {count:-1}
    },
    {
        $limit : 5
    }
);

私はこの結果を得ました:

{
        "errmsg" : "exception: $where is not allowed inside of a $match aggregation expression",
        "code" : 16395,
        "ok" : 0
}

質問:検索および集計関数で機能するfieldValue.contains( "someString")クエリをMongoDBで作成する方法。

4

1 に答える 1

9

そのために正規表現を使用できます。

$match: { content: /someString/ }

この場合も、より効率的なため、 $wherefor の代わりに正規表現を使用する必要があります。find

db.main.find( { content: /someString/ } );
于 2012-10-12T19:56:56.510 に答える