あなたは私が見ることができるオプションが一致するドキュメントを上に移動して、ソートweight
により、全体の結果を制限するために、インスタンスのための余分なフィールドweight
を導入してaggregate
を使用しているスクリプトを使用して好きではない場合:
db.test.aggregate({
$project: {
type: 1,
details: 1,
at: 1,
weight: {
$cond: [
{ "$or": [
{$eq: ["$type", "One"] },
{$eq: ["$type", "Two"] }
] },
0, 1] }
} },
{$sort: {weight: 1}},
{ $limit : 5 }
);
この例についての注意。私は$ inを$でいくつかの等価で置き換えます。 weight
を最終結果に表示したくない場合は、集計パイプラインで別の投影を適用して削除できます。
テストデシベル:
> db.test.find({})
{ "_id" : ObjectId("58067329a7518db4d3d2e973"), "type" : "One", "details" : "This is one", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("5806733da7518db4d3d2e974"), "type" : "Two", "details" : "This is two", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("5806734ba7518db4d3d2e975"), "type" : "Three", "details" : "This is three", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("58067374a7518db4d3d2e976"), "type" : "Four", "details" : "This is four", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("58067381a7518db4d3d2e977"), "type" : "Five", "details" : "This is five", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("5806738fa7518db4d3d2e978"), "type" : "Six", "details" : "This is six", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("580673cfa7518db4d3d2e979"), "type" : "Seven", "details" : "This is seven", "at" : "some place, where one is relevant" }
結果:
> db.test.aggregate({ $project: { type: 1, details: 1, at: 1, weight: { $cond: [ { "$or": [ {$eq: ["$type", "One"] }, {$eq: ["$type", "Two"] } ] }, 0, 1] } } }, {$sort: {weight: 1}}, { $limit : 5 }, {$project: {type: 1, details: 1, at: 1} });
{ "_id" : ObjectId("58067329a7518db4d3d2e973"), "type" : "One", "details" : "This is one", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("5806733da7518db4d3d2e974"), "type" : "Two", "details" : "This is two", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("58067374a7518db4d3d2e976"), "type" : "Four", "details" : "This is four", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("58067381a7518db4d3d2e977"), "type" : "Five", "details" : "This is five", "at" : "some place, where one is relevant" }
{ "_id" : ObjectId("5806734ba7518db4d3d2e975"), "type" : "Three", "details" : "This is three", "at" : "some place, where one is relevant" }
パーフェクト@マイク、shauneu!完璧に動作します! 私は、この例では、2つの可能な重みしか持たないことに気づくことはできません。これは条件一致(0)と一致しない(1)と仮定して、それを重みで並べ替えることです。 しかし、私たちはより多くの体重を持つことができますか? $ cond配列に追加する必要があると思います。条件と追加の重み値の両方です。そうですか? –
一致した条件と一致しない結果のドキュメントに含める必要があるため、一致するドキュメントを開始するようにする必要があります。 –