0

私は初めてNoSQLMongoDB、実行できるクエリの種類とその実行方法について少し戸惑っています。私の知識はより単純なクエリに限られています

MongoDBソートに使用するのではなく、内部で複雑なクエリだと思うものを作成したいと思いますがPHP、それが可能かどうか、またはその方法がわかりません。

tagコレクション内にarray. {tag: ["blue","red","yellow","green","violet"]}.

第 1 レベルの問題:がbirdsあるものをすべて見つけたいとしましょう。 は必須で、他の色はオプションです。tag blue & yellow & greenbluetag

birds第 2 レベルの問題: 次に、クエリされたすべての色を持つ が最初に表示されるようにクエリを並べ替えたいと思います。

mongoDB でこのクエリを作成することは可能ですか? もしそうなら、どうすればできますか?

ここに画像の説明を入力

4

2 に答える 2

1

集計フレームワークを使用できます。次のデータセットは次のとおりです。

{ "_id":ObjectId(...), "bird":1, "tags":["blue","red","yellow","green","violet"]}
{ "_id":ObjectId(...), "bird":2, "tags":["red","yellow","green","violet"] }
{ "_id":ObjectId(...), "bird":3, "tags":["blue","yellow","violet"] }
{ "_id":ObjectId(...), "bird":4, "tags":["blue","yellow","red","violet"] }
{ "_id":ObjectId(...), "bird":5, "tags":["blue"] }

次のクエリを適用できます。

colors = ["blue","red","yellow","green"];
db.birds.aggregate(
  { $match: {tags: 'blue'} },
  { $project: {_id:0, bird:1, tags:1} },
  { $unwind: '$tags' },
  { $match: {tags: {$in: colors}} },
  { $group: {_id:'$bird', score: {$sum:1}} },
  { $sort: {score:-1} },
  { $project: {bird:'$_id', score:1, _id:0} }
)

次のような結果が得られます。

{
  "result" : [
    { "score" : 4, "bird" : 1 },
    { "score" : 3, "bird" : 4 },
    { "score" : 2, "bird" : 3 },
    { "score" : 1, "bird" : 5 }
  ],
  "ok" : 1
}
于 2013-08-08T06:15:42.700 に答える