Mongoose find()和count()在同一时间

时间:2016-02-22 12:09:21

标签: node.js mongodb mongoose

想象一下下面的样本数据:

TESTDB

  {
    "_id": "56caf46a97bbe1b24163ef81",
    "age": 40,
    "eyeColor": "red"
  },
  {
    "_id": "56caf46a460b1d91a0d882d8",
    "age": 29,
    "eyeColor": "green"
  },
  {
    "_id": "56caf46afd859790720a2bb8",
    "age": 27,
    "eyeColor": "brown"
  },

我必须渲染:

  • TestDB.eyeColor(红色,绿色,棕色)
  • TestDB文档的数量(3)

同时查看页面。

我使用快递,所以我应该使用res.render(' view',{data})。

我尝试过这样:

app.get('/somePage', function(req, res, next){
    TestDB.find({}, function(err, dbs){
        res.render('view', {'eyeColor' : dbs.eyeColor })
    }).count(function(err, count){

       // How can I render this 'count' to view at the sametime?
       // If I render at here, I can't use above dbs.eyeColor, 
       // Same, If I render at above, I can't use count. 

       // Ok, There is a way to separate find() and count()
       // And make a variable and then render with this, 
       // Should I do like that? I think there must be easy way. 



    })
});

1 个答案:

答案 0 :(得分:0)

如果eyeColor可能不同,distinct可能会更好,如下所示。它会将eysColor作为一个数组['red', 'green', 'brown']返回,然后将其呈现为直接查看,count可以通过colors.length检索。

TestDB.distinct('eyeColor', function(error, colors) {
    res.render('view', {'eyeColor' : colors})
});

如果eyeColor可能是重复值,则可以按照评论中显示的Blackes进行

TestDB.find({}, function(error, vals) {
    res.render('view', {'eyeColor' : vals.map(function(v) {return v.eyeColor;});})
});