3

タグに基づいて記事をmongodbで検索しようとしています:

> use test;
> db.articles.save( { name: "article1", tags: ['one', 'two', 'three'] } );
> db.articles.save( { name: "article2", tags: ['two', 'three'] } );
> db.articles.save( { name: "article3", tags: ['one', 'three'] } );
> db.articles.save( { name: "article4", tags: ['one', 'two', 'four'] } );
> db.articles.save( { name: "article5", tags: ['four', 'five'] } );
> db.articles.ensureIndex( { tags: 1 } );
> db.articles.find( { $or : [ { tags: 'four' }, { tags: 'five' } ] } )

{ "_id" : ObjectId("509d7b555bff77729a26a232"), "name" : "article4", "tags" : [ "one", "two", "four" ] }
{ "_id" : ObjectId("509d7b555bff77729a26a233"), "name" : "article5", "tags" : [ "four", "five" ] }

ご覧のとおり、クエリは「4」または「5」を検索しますが、「ベストマッチ」でソートされた結果を取得したいと思います (2 つのタグが一致した方が、1 つのタグが一致した場合よりも優れています)。

どうすればこれを行うことができますか? マップリデュース?

前もって感謝します:

シャビ

4

1 に答える 1

1

がっかりさせて本当に申し訳ありませんが、今モンゴにできることは何もありません。唯一のオプションは、アプリケーション側で並べ替えを実装することです。これが非効率すぎることはわかっていますが、他に選択肢はありません。

私がお手伝いできる唯一のことは、代用を提案することです

$or : [ { tags: 'four' }, { tags: 'five' } ]

tags:{$in:['four','five']}

これはクエリには役立ちませんが (結果を並べ替えるという意味です)、さまざまなタグが多数ある場合は、サーバー上で作成する方が簡単です。

于 2012-11-09T23:51:00.303 に答える