sql >> データベース >  >> NoSQL >> MongoDB

$ inを使用したMongoDBでの結果の順序?

    一般的に、ソート順を指定せずに検索している場合、結果の順序は保証されません。

    さらに、配列で並べ替えることはできません(説明されているように、配列を配列で並べ替える場合はさらに少なくなります)。 sort() 論理比較を使用して、結果ドキュメント内のフィールドに基づいて昇順または降順を決定します。

    必要なカスタムソートロジックを独自のアプリケーションコードに実装する必要があります。

    便利なアプローチは、新しい AggregationFramework を利用することです。 MongoDB 2.2では、特に、 $unwind 機能 ドキュメントのストリームへの配列。

    たとえば、テストデータを次のように設定します。

    { "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
    { "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
    { "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
    { "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
    

    $in [2,3]で検索すると、一致するドキュメントが見つかります:

    > db.matches.find({'a': { $in: [2,3]}})
    { "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
    { "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
    { "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
    

    集約フレームワークを使用すると、$match 同じドキュメントを作成し、結果を操作して基本的な並べ替えを実行します:$unwind 配列、$sort それら、そして$group これらを結果に戻します:

    db.matches.aggregate(
      { $match : {
           a: { $in: [2,3] }
      }},
      { $unwind : "$a" },
      { $sort: {
          "a": -1
      }},
      { $group : {
          _id: '$_id',
          a: { $addToSet: "$a" }
      }}
    )
    

    したがって、この例では、配列が一致するドキュメントは、配列値の昇順で並べ替えられています。

    {
        "result" : [
            {
                "_id" : ObjectId("504ac94eb50571321b2f932c"),
                "a" : [ 1, 2, 3]
            },
            {
                "_id" : ObjectId("504ac93fb50571321b2f932a"),
                "a" : [ 1, 2, 4 ]
            },
            {
                "_id" : ObjectId("504ac954b50571321b2f932d"),
                "a" : [ 3, 7, 9 ]
            }
        ],
        "ok" : 1
    }
    


    1. Gomgoパッケージの接続プール

    2. Android Studio:MongoJavaDriverを使用してMongoDBサーバーに接続する

    3. ASP.Net MVCサイトをロックせずにセッションを操作する方法はありますか?

    4. Meteor.jsとマングースの互換性