1

問題がありますが、ここにコード全体を貼り付けることはできないので、説明してみましょう。ID でドキュメントを検索し、その ObjectId の配列要素を入力する必要があります。User コレクションから次のドキュメントがあるとします。

{
  _id: 1,
  "first_name":"Nick",
  "last_name":"Parsons",
  "email":"nick@movementstrategy.com",
  "password":"foo",
  "clients":[
    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010",
    "50f5e90b545cf990c5000013"
  ]
}

それを見つけた後、次のようにクライアントにデータを入力しています:

User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });

上記のコードを実行すると、クライアントの配列が入力された「user」変数が作成されます。しかし、クライアントの順序は次のように間違っています。

       {
          _id: "50f5e901545cf990c500000f",
          "first_name":"cl1",
       },
       {
          _id: "50f5e90b545cf990c5000013",
          "first_name":"cl3",
       },
       {
          _id: "50f5e90b545cf990c5000010",
          "first_name":"cl2",
       }

次のようにする必要があります。

    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010",
    "50f5e90b545cf990c5000013" 

それ以外の:

    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000013",
    "50f5e90b545cf990c5000010"     

誰かが同様の問題を抱えていますか、それとも私は幸運ですか?

編集:コードを追加しました: http://pastie.org/5901177 そのコードでは、3 つのクライアントを作成し、user.clients 配列にプッシュします。その後、user.clients 配列の上にクライアントをもう 1 つ追加しました。だから私がするとき

  Client.where('_id').in(user.clients)

順番を間違えています。コンソール経由でこれを見てください。

4

1 に答える 1

1

MongoDB では、すべての変更 (または追加されたドキュメント) がリストの一番下に移動します。アイテムを特定の順序で返す場合は、クエリで次のように指定します。

User.find()
    .sort({_id: 1})

where-1は逆順を指定します。他の基準で並べ替えることができます。

于 2013-01-28T10:09:10.537 に答える