【问题标题】:Mongoose aggregate return empty result and working in mongo console [duplicate]Mongoose 聚合返回空结果并在 mongo 控制台中工作 [重复]
【发布时间】: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);
	 	}
	 });

有什么想法吗?

谢谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案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,我无意在这里发送垃圾邮件,我会尽快查看您的反馈,非常感谢。
    • 谢谢!你是救生员。
    猜你喜欢
    • 2021-03-30
    • 2015-08-04
    • 2014-03-21
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2019-01-14
    • 2016-11-16
    • 2018-06-20
    相关资源
    最近更新 更多