猫鼬:比赛,小组,项目怪异

时间:2018-01-17 22:26:01

标签: mongoose

开始探索Mongo的奇迹...

所以我的目标很简单:获取页面所有者的页面浏览总数(仅举个例子,使用类似的概念)。

看起来像

SELECT SUM(views) FROM page WHERE user_id = 123;

或类似于MySQL的东西。

所以我正在使用MongoDB和Mongoose NodeJS包做类似的事情:

Page.aggregate([
    { $match : { user_id : 123 } },
    { $group : { _id : null, viewGroup : { $addToSet : "$views" } } },
    { $project : { view_total : { $sum : "$viewGroup" } } }
], (err, result) => { ... });

这是奇怪的部分:它有效,但只有当文档的“views”属性中至少有一个值为> 1。

所以说我有两个文档:

{ page_id : 1, user_id : 123, views : 1 }
{ page_id : 2, user_id : 123, views : 1 }

我得到的结果是 1

说我有这两个文档:

{ user_id : 123, views : 1 }
{ user_id : 123, views : 2 }

我得到的结果是 3

我必须接近这个错误。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

正如Veeram在评论中所提到的,'#ajax' => [ 'callback' => array($this, 'addMultipleItems'), 'event' => 'change', 'progress' => array( 'type' => 'throbber', 'message' => t('Adding another item...'), ), ], 应该被用来代替$push。我没有意识到$addToSet只添加了唯一值,其中$addToSet只是将每个值推送到我想要的数组。