Mongoose 聚合返回空结果并在 mongo 控制台中工作 [重复]

Posted

技术标签:

【中文标题】Mongoose 聚合返回空结果并在 mongo 控制台中工作 [重复]【英文标题】:Mongoose aggregate return empty result and working in mongo console [duplicate] 【发布时间】:2016-07-14 10:05:54 【问题描述】:

堆栈: + Mongoose 4.4.10(最后一个稳定版本)已经用旧版本测试过 + MongoDb 2.6.3

我在 mongodb 控制台中执行该函数,并成功重新

db.activities.aggregate(
     $match :  'organizer': ObjectId("5408e4609640de8768c1d212")  
  ,  $group : 
        _id : "$organizer",  
        totalSwims:  $sum : 1 , 
        longestSwim :   $max: "$distance" , 
        moreDistanceSwim :   $max: "$duration" , 
        warmestWaterSwim :   $max: "$activityWeather.waterTemperature" , 
        coldestWaterSwim :   $min: "$activityWeather.waterTemperature" , 
        warmestSwim :   $max: "$activityWeather.temperature" , 
        coldestSwim :   $min: "$activityWeather.temperature" );

"_id" : ObjectId("5408e4609640de8768c1d212"), "totalSwims" : 50, "longestSwim" : 6512.997, "moreDistanceSwim" : "02:35", "warmestWaterSwim" : "22", "coldestWaterSwim" : " 22", "warmestSwim" : "15", "coldestSwim" : "15"

但是如果我尝试通过 mongoose 总是返回一个空数组 [] 我已经有一些聚合函数运行良好,但不知道为什么那个不起作用。

	activities.aggregate([
		 $match :  'organizer': userId  ,
		 $group :  
			_id : "$organizer",  
			totalSwims:  $sum : 1 , 
			longestSwim :   $max: "$distance" , 
			moreDistanceSwim :   $max: "$duration" , 
			warmestWaterSwim :   $max: "$activityWeather.waterTemperature" , 
			coldestWaterSwim :   $min: "$activityWeather.waterTemperature" , 
			warmestSwim :   $max: "$activityWeather.temperature" , 
			coldestSwim :   $min: "$activityWeather.temperature" 
		  ]
	 , function(err, result)
	 	if (err) 
	 		console.error('Problem %s', err);
	 		return next(err);
	 	 else 
	 		console.error('Result %j', result);
	 		return next(null, result);
	 	
	 );

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

对不起,在没有任何相关结果之前搜索了一段时间后,我终于弄明白了。它接缝的是,就这种情况而言,我需要使用 ObjectId 方法确保 id 而不是只发送一个字符串。

var ObjectID = require("mongodb").ObjectID;
activities.aggregate([
     $match :  'organizer': ObjectID(userId)  ,

【讨论】:

有大量重复项(以及 GitHub 上的一个大问题)。所以这不是一个很难的搜索。另外,如果您打算自己回答,请同时进行,不要“先发布”然后“稍后回答”,因为这看起来像是在问“真正的问题”。有一个特定选项可以在您发帖时包含您的“自我回答”。 您也弄错了,因为不需要引入单独的依赖项。 Mongoose 构建在 mongodb 驱动程序之上。所以依赖关系已经存在,并以不同的方式访问。在Moongoose aggregate $match does not match id's中查看正确方法 感谢您的反馈 Blakes,我无意在这里发送垃圾邮件,我会尽快查看您的反馈,非常感谢。 谢谢!你是救生员。

以上是关于Mongoose 聚合返回空结果并在 mongo 控制台中工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 聚合 $match 返回空结果

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

猫鼬聚合返回空结果[重复]

猫鼬聚合返回空结果[重复]

在 Mongo 聚合中使用 Cursor() 和 Mongoose

mongoose 聚合 $avg $ 或返回空值