大家!几天以来,我一直在寻找解决我的问题的方法,经过多次失败的尝试,我决定在这里提出我的第一个问题。
所以,我有一个像这样的模型:
const Exercise = new Schema (
{
description: String,
duration: Number,
date: Date
},
{
_id: false
}
);
const User = new Schema({
username: String,
log: [
Exercise
]
});
我想找到一个特定的用户,并在日期范围内过滤他/她的运动日志。如果范围内没有任何练习,我只想将id,用户名和日志作为一个空数组返回。所以,我建立了这个查询:
User.aggregate([
{
$match: {
_id: userIdInput
}
},
{
$project: {
_id: 1,
username: 1,
log: {
$filter: {
input: "$log",
as: "log",
cond: {
$gte: [ "$$log.date", from ]
}
}
}
}
}])
.exec()
.then((log) => {
res.json(log);
})
.catch(err => {
next(err);
});
}
但是此查询始终返回一个空数组。我在做任何错误或以更好的方式编写此查询的提示吗?
我非常感谢您的帮助。
原来的问题是,当我们aggregate()
在猫鼬中使用时,必须手动将id字符串强制转换为ObjectId类型,因为它不会像find()
例如那样自动执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句