Mongoose返回数组$ size

时间:2015-12-21 16:53:05

标签: javascript node.js mongoose

我有一份文件:

{
    _id: 98556a665626a95a655a,
    first_name: 'Panda',
    last_name: 'Panda,
    notifications: [{
        _id: '',
        // ...
    }]
}

我想返回以下回复:

{
   _id: 98556a665626a95a655a,
   first_name: 'Panda',
   last_name: 'Panda',
   notifications: 2
}

问题在于通知计数字段,

我使用了Mongoose NodeJS包,我尝试了以下方法:

UserDBModel.findOne({_id: uid}, {notifications: {$size: '$notifications'}}, function(err, user){ });

但似乎行不通。 有人可以帮帮我吗? :)

提前致谢。

3 个答案:

答案 0 :(得分:2)

也许,你可以在节点中做这样的事情。

FormPage

既然你正在使用JS,也可以使用它的力量! :)

答案 1 :(得分:2)

aggregateproject管道运算符一起使用。

UserDBModel.aggregate()
    .match({_id: uid})
    .project({
        first_name: 1,
        last_name: 1,
        notifications: {$size:"$notifications"}
    })
    .exec(function(err, notifications) {
        // notifications will be an array, you probably want notifications[0]
    });

请注意,您必须明确指定项目操作员的字段。

答案 2 :(得分:0)

我发现对我有用的是创建猫鼬虚拟属性。

Schema.virtual('notifications_count').get(function() {
  if (this.notifications) {
    return this.notifications.length;
  }
});