.aggregate(...).toArray 不是函数

Posted

技术标签:

【中文标题】.aggregate(...).toArray 不是函数【英文标题】:.aggregate(...).toArray is not a function 【发布时间】:2019-02-01 07:55:23 【问题描述】:

这是我遇到错误的代码。 我尝试了多种方法,但总是遇到同样的错误。 TypeError: _user10.default 我搜索了其他答案,但它们是 mongodb 而不是 mongoose ex 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);
        
    );
,

【问题讨论】:

User.aggregate 会返回游标吗? toArray 仅在游标上可用:docs.mongodb.com/manual/reference/method/cursor.toArray 我知道 .aggregate 总是返回对象,但这并不意味着您不能将它们放入数组中并在对象中返回数组。也许我不明白这个问题。我是这个的新手 可能是 ***.com/questions/39381453/…... 【参考方案1】:

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

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

【讨论】:

以上是关于.aggregate(...).toArray 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

与你相遇好幸运,Sailsjs查询

将 .ToArray() 放入 from/in [重复] 时,LINQ 查询性能不佳

list 属性字段直接转成字符串数组

Laravel Eloquent toArray 不使用方括号

toArray(),toJson(),hidden([ ]),visible([ ])

toArray()在Java中的用法