尝试使用集合关系聚合时出现 MongoError
MongoError when trying to aggregate with collection relationship
我是 mongodb 的新手,使用来自 meanjs.org 的平均堆栈。
我有一个用户集合关系模型:
var MealSchema = new Schema({
mealDate: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
mongoose.model('Meal', MealSchema);
我找到了一个有效的实现:
var user = req.user;
Meal.find({
mealDate: {
$gte: minus8days.toDate(),
$lt: tomorrow.toDate()
},
user : user
}).exec(function (err, meals) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(meals);
}
});
但我需要一些分组和聚合,所以我试图更改此代码以使用聚合而不是查找,我尝试了很多组合,但我一直收到错误,基本上以下实现会抛出错误 MongoError:超出最大调用堆栈大小
Meal.aggregate([
{
$match: {
$and: [
{
mealDate: {
$gte: minus8days.toDate(),
$lt: tomorrow.toDate()
}
}, { user: user }
]
}
}]...
为什么 user:user 使用查找而不是聚合?
如何固定聚合方法?
试试这个:
Meal.aggregate([
{
$match: {
mealDate: { $gte: minus8days.toDate(), $lt: tomorrow.toDate()},
user: user._id
}
}
], function(err, docs){
if(err) console.log("Error : " + JSON.stringify(err));
if(docs) console.log("Got the docs successfully : " + JSON.stringify(docs));
});
我是 mongodb 的新手,使用来自 meanjs.org 的平均堆栈。
我有一个用户集合关系模型:
var MealSchema = new Schema({
mealDate: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
mongoose.model('Meal', MealSchema);
我找到了一个有效的实现:
var user = req.user;
Meal.find({
mealDate: {
$gte: minus8days.toDate(),
$lt: tomorrow.toDate()
},
user : user
}).exec(function (err, meals) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(meals);
}
});
但我需要一些分组和聚合,所以我试图更改此代码以使用聚合而不是查找,我尝试了很多组合,但我一直收到错误,基本上以下实现会抛出错误 MongoError:超出最大调用堆栈大小
Meal.aggregate([
{
$match: {
$and: [
{
mealDate: {
$gte: minus8days.toDate(),
$lt: tomorrow.toDate()
}
}, { user: user }
]
}
}]...
为什么 user:user 使用查找而不是聚合? 如何固定聚合方法?
试试这个:
Meal.aggregate([
{
$match: {
mealDate: { $gte: minus8days.toDate(), $lt: tomorrow.toDate()},
user: user._id
}
}
], function(err, docs){
if(err) console.log("Error : " + JSON.stringify(err));
if(docs) console.log("Got the docs successfully : " + JSON.stringify(docs));
});