使用mongoskin进行聚合查询

时间:2014-02-21 20:40:23

标签: node.js mongodb

我想用mongoskin运行以下查询,但似乎不支持聚合

mongodb查询

db.users.aggregate({
        $match : {
            _id : ObjectId("52ee0844177c86dc1d000001")
        }
    }, {
        $unwind : "$todos"
    }, {
        $unwind : "$todos.tags"
    }, {
        $group : {
            _id : "$todos.tags",
            count : {
                $sum : 1
            }
        }
    });

javascript mongoskin code NOT WORKING

var tags = db.collection('users').aggregate({
        $match : {
            _id : db.bson_serializer.ObjectID.createFromHexString(req.user._id.toString())
        }
    }, {
        $unwind : "$todos"
    }, {
        $unwind : "$todos.tags"
    }, {
        $group : {
            _id : "$todos.tags",
            count : {
                $sum : 1
            }
        }
    });

如何使用mongoskin聚合?

修改

当我致电console.log("%j", tags);时,我得到了

TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at K:\home\projects\todo\routes\tags.js:22:20
    at callbacks (K:\home\projects\todo\node_modules\express\lib\router\index.js:164:37)
    at param (K:\home\projects\todo\node_modules\express\lib\router\index.js:138:11)
    at pass (K:\home\projects\todo\node_modules\express\lib\router\index.js:145:5)
    at Router._dispatch (K:\home\projects\todo\node_modules\express\lib\router\index.js:173:5)
    at Object.router (K:\home\projects\todo\node_modules\express\lib\router\index.js:33:10)
    at next (K:\home\projects\todo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
    at Object.ensureAuthenticated [as handle] (K:\home\projects\todo\services\middleware.js:13:11)
    at next (K:\home\projects\todo\node_modules\express\node_modules\connect\lib\proto.js:193:15)

events.js:72
        throw er; // Unhandled 'error' event
              ^
TypeError: object is not a function
    at K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\collection.js:1611:7
    at K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\db.js:940:5
    at Cursor.nextObject (K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:678:5)
    at commandHandler (K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:658:14)
    at K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\db.js:1670:9
    at Server.Base._callHandler (K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\base.js:382:41)
    at K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\server.js:472:18
    at MongoReply.parseBody (K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\responses\mongo_reply.js:68:5)
    at null.<anonymous> (K:\home\projects\todo\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\server.js:430:20)
    at EventEmitter.emit (events.js:95:17)

1 个答案:

答案 0 :(得分:0)

检查json结构!聚合在比赛结束后关闭。而不是那样,将参数聚合为数组:

db.collection('users').aggregate([{
    $match : {
      _id : db.bson_serializer.ObjectID.createFromHexString(req.user._id.toString())
    }
}]);

结帐documentation