使用mongoose按日期排序

时间:2013-01-21 21:50:53

标签: node.js mongodb express mongoose

这是我的架构:

var userschema = new mongoose.Schema({

  user: String,
  imagen: [{ 

              name: String,
              author: String,
              date: { type: Date, default: Date.now },

           }],
  follow: [String]

});

这是代码:

usermodel.findOne({ user: req.session.user }, function (err, user){

        usermodel.find({ _id: {$in: user.follow } }, function (err, images){

          console.log(images);

           if (err) throw err;

            res.render('home.ejs', {

              user: user,
              following: images

            });

         });

});

Schema中的follow数组包含实际用户所关注的用户的_id个。我正试图获得这样的输出:

{ _id: 50fd9c7b8e6a9d087d000006,
   imagen: 
    [ { name: 'fff.png',
        author: 'foo',
        _id: 50fd9ca2bc9f163e7d000006,
        date: Mon Jan 21 2013 20:53:06 GMT+0100 (CET) },
      { name: 'mmm.png',
        author: 'foo',
        _id: 50fda83a3214babc88000005,
        date: Mon Jan 21 2013 21:41:34 GMT+0100 (CET) } ] },
 { _id: 50fd9d3ce20da1dd7d000006,
        imagen: 
          [ { name: 'ddd.jpg',
              author: 'faa',
              _id: 50fda815915e068387000005,
              date: Mon Jan 21 2013 21:42:57 GMT+0100 (CET) } ] }

我正在努力获得类似的输出,例如:

  { [ { name: 'fff.png',
        author: 'foo',
        _id: 50fd9ca2bc9f163e7d000006,
        date: Mon Jan 21 2013 20:53:06 GMT+0100 (CET) },
      { name: 'ddd.png',
        author: 'faa',
        _id: 50fda815915e068387000005,
        date: Mon Jan 21 2013 21:42:34 GMT+0100 (CET) }, 
       { name: 'mmm.png',
        author: 'foo',
        _id: 50fda83a3214babc88000005,
        date: Mon Jan 21 2013 21:41:34 GMT+0100 (CET) }
  ] }

我认为我想要的是不可能的,或者非常复杂,是否有任何解决方案......?

谢谢你的进步!

1 个答案:

答案 0 :(得分:0)

在这一行:

usermodel.find({ _id: {$in: user.follow } }, function (err, images){

images不是好名字,更好的名称是users甚至是docs(您将拥有一组usermodel架构的文档)。因此,代码中的images是找到的文档。

我用你给出的相同架构进行了一些测试。这是我加入所有user.imagen数组然后对它们进行排序的部分(当然它是测试用例但是它有效,希望这会引导你以正确的方式):

User.find {}, (err, users) ->
  all_images = []
  # iterate users array to join all imagen arrays
  for user in users
    all_images.push user.imagen
  # flatten nested arrays in all_images with underscore function
  all_images = _.flatten all_images
  # sort all_images the way you want (i.e. descending)
  all_images.sort (a, b) -> b.date - a.date
  # render page and see that it works
  res.render 'test.html', {images: all_images}