迭代mongo db中的记录并返回自定义对象

时间:2016-11-27 04:19:10

标签: node.js mongodb mongoose-schema

我有一个记录很少的mongodb集合。 我想迭代我的集合中的记录并返回一个customObject。 对于每个记录,我想对它做一些计算,并相应地在我的customObject中包含一个条目,如果它符合我的条件,然后最后返回customObject。

我正在使用mongoose.js

说我的记录是

Friends:{
  {name:"John", money_lent:100},
  {name:"Tom", money_lent:100}
  {name:"Tom", money_lent:100}
  {name:"Jill", money_lent:100}
  {name:"John", money_lent:100}
  {name:"Nate", money_lent:100}
  {name:"John", money_lent:100}
  {name:"Jill", money_lent:100}
  {name:"Nate", money_lent:100}
  {name:"Nate", money_lent:100}
  {name:"Nate", money_lent:100}
  {name:"Rob", money_lent:100}
  
}

我想计算和对象喜欢并返回在我的控制器中使用

{
  {name:"John", times_money_lent:2}
  {name:"Tom", times_money_lent:2}
  {name:"Jill", times_money_lent:2}
  {name:"Nate", times_money_lent:4}
  {name:"Rob", times_money_lent:1}
}

2 个答案:

答案 0 :(得分:0)

朋友需要像

Friends: [...]

因为它是一个列表。我在你的问题中看到的语法是无效的。以朋友为列表,你可以做到

Friends.map (function (friend) {
    return { name: friend.name,
             times_money_lent: friend.money_lent / 10 };
});

或者其他什么

答案 1 :(得分:0)

假设您已经从mongo获取了数据,那么您可以像这样进行计算:

var result = new Array();
Friends.map(function (friend) {
    var r = grep(result, function (val) {
        return val.name == friend.name;
    });
    if(r.length == 0) {
        result.push({name:friend.name, times_money_lent:1}
    } else {
        r[0].times_money_lent ++;
    }
});

顺便说一下,你需要安装grep-from-array才能使用grep!否则你需要自己实现搜索功能。