12

次のような大きなドキュメントから特定のフィールドを抽出するのにうまく機能するMongo検索クエリがあります...

db.profiles.find(
  { "profile.ModelID" : 'LZ241M4' },
  {
    _id : 0,
    "profile.ModelID" : 1,
    "profile.AVersion" : 2,
    "profile.SVersion" : 3
  }
);

...これにより、次の出力が生成されます。私のプロジェクションは SVersion の前に AVersion を要求したにもかかわらず、ドキュメント内で SVersion が AVersion の前に来ることに注意してください。

{ "profile" : { "ModelID" : "LZ241M4", "SVersion" : "3.5", "AVersion" : "4.0.3" } }
{ "profile" : { "ModelID" : "LZ241M4", "SVersion" : "4.0", "AVersion" : "4.0.3" } }

...問題は、出力を次のようにしたいということです...

{ "profile" : { "ModelID" : "LZ241M4", "AVersion" : "4.0.3", "SVersion" : "3.5" } }
{ "profile" : { "ModelID" : "LZ241M4", "AVersion" : "4.0.3", "SVersion" : "4.0" } }

指定したフィールド順でクエリの結果を表示するには、Mongo JavaScript シェルを取得するにはどうすればよいですか?

4

4 に答える 4

7

わかった。フィールドの値ではなく、「フィールド」で並べ替えられた結果を返したいとします。

簡単な答えは、これはできないということです。おそらく、新しい集約フレームワークで可能です。しかし、これはフィールドを並べ替えるだけではやり過ぎのようです。

検索クエリの 2 番目のオブジェクトは、返されたフィールドを含めたり除外したりするためのものであり、それらを順序付けするためのものではありません。

  {
    _id : 0,               // 0 means exclude this field from results
    "profile.ModelID" : 1, // 1 means include this field in the results
    "profile.AVersion" :2, // 2 means nothing
    "profile.SVersion" :3, // 3 means nothing
  }

最後に、フィールドが戻ってくる順序を気にする人は、これを行う必要はありません。アプリケーションは、フィールドの順序に関係なく、必要なフィールドを利用できる必要があります。

于 2012-08-16T00:54:23.963 に答える
0

バージョン 2.6 (2014 年に登場) 以降、MongoDB は書き込み操作 ( source )に続くドキュメント フィールドの順序を保持します。

PS Pythonを使用している場合、これは興味深いかもしれません。

于 2019-03-22T08:07:55.187 に答える