填充后错误的数组顺序

时间:2013-01-28 09:48:51

标签: node.js mongodb express mongoose

我遇到了问题,但我无法粘贴整个代码,所以让我试着解释一下。我需要通过id找到一些文档并填充其ObjectId的数组元素。假设我有来自用户集合的以下文档:

{
  _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数组的顶部添加了一个客户端。所以当我做的时候

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

我的订单错了。请通过控制台查看此内容。

1 个答案:

答案 0 :(得分:1)

在MongoDB中,每个修改(或添加的文档)都会到达列表的底部。如果您希望按特定顺序返回项目,请在查询中指定:

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

其中-1指定相反的顺序。您可以按照任何其他标准进行排序。