.aggregate(...)。toArray不是一个函数

时间:2018-08-26 16:19:18

标签: node.js mongodb mongoose socket.io

这是我遇到错误的代码。 我尝试了多种方法,但保持同样的错误。 TypeError:_user10.default.aggregate(...)。toArray不是函数 我搜索了其他答案,但它们不是mongodb,不是mongoose 前db.collection('users')。aggregate 任何帮助将不胜感激

import User from './user.model';
import socket from './../../CHATtest/web/socket.js';



getUserInfo({userId,socketId = false}){
    let queryProjection = null;
    if(socketId){
        queryProjection = {
            "socketId" : true
        }
    } else {
        queryProjection = {
            "username" : true,
            "online" : true,
            '_id': false,
            'id': '$_id'
        }
    }
    return new Promise( async (resolve, reject) => {
        try {
    //const result = await User.aggregate([{
    //await User.aggregate([{
    User.aggregate([{
    //DB.collection('users').aggregate([{
                $match:  {
                    _id : userId
                }
            },{
                $project : queryProjection
            }
  ]).toArray( (err, result) => {
                if( err ){
                    reject(err);
                }
                socketId ? resolve(result[0]['socketId']) : resolve(result);
            });
        } catch (error) {
            reject(error);
        }
    });
},

1 个答案:

答案 0 :(得分:0)

根据Mongoose文档,调用Model.aggregate()会返回一个Aggregate对象(https://mongoosejs.com/docs/api.html#model_Model.aggregate)。它没有toArray()方法,这就是为什么出现错误的原因。

Aggregate对象是可链接的,您需要以对exec()的调用结束该链。那将返回一个承诺(https://mongoosejs.com/docs/api.html#aggregate_Aggregate