我尝试了所有其他问题的解决方案,其中大多数已经过时了
我需要查询请求者数量大于0的项目,以使端点能够获取通知。
型号:
const projectSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User'
},
title: { type: String, required: true },
description: { type: String, required: true, minlength: 300, maxlength: 3000 },
comments: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Comment'
}],
state: { type: Boolean, default: true },
requesters: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Profile'
}]
}
这是我尝试过的查询,它似乎不起作用。 由于某种原因,它返回一个空白数组。
const projects = await Project.find({
user: req.currentUser!.id,
"requestersLength": { "$gt": 0 }
});
res.send(projects);
答案 0 :(得分:0)
查询以查找数组中至少包含一个元素的所有文档。
db.CollectionName.find({'arrayFiled.0': {$exists: true}})
在您的情况下,您的代码将如下所示
const projects = await Project.find({
user: req.currentUser!.id,
{'requesters.0': {$exists: true}}
});
res.send(projects);
也可以使用$expr
查询运算符(版本3.6。+ 中的新功能)
允许在查询中使用聚合表达式 语言。
{ $expr: { <expression> } }
示例:
db.CollectionName.find({$expr:{$gt:[{$size:"$yourArrayField"}, 0]}})
详细了解$expr
here