我正在使用mongoose在MongoDB上执行CRUD操作。这就是我的架构的外观。
var EmployeeSchema = new Schema({
name: String,
description: {
type: String,
default: 'No description'
},
departments: []
});
每位员工都可以属于多个部门。 Departments数组看起来像[1,2,3]。在这种情况下,departments.length = 3.如果员工不属于任何部门,则departments.length将等于0.
我需要找到EmployeeSchema.departments.length>所有员工。 0&如果查询返回超过10条记录,我只需要获得最多没有部门的员工。
是否可以使用Mongoose.find()来获得所需的结果?
答案 0 :(得分:15)
假设您的模型名为Employee
:
Employee.find({ "departments.0": { "$exists": true } },function(err,docs) {
})
由于$exists
要求数组的0
索引,这意味着它中包含某些内容。
同样适用于最大数量:
Employee.find({ "departments.9": { "$exists": true } },function(err,docs) {
})
因此,数组中至少需要有10个条目才能匹配。
实际上,您应记录数组的长度,并在每次添加内容时使用 $inc
进行更新。然后你可以这样做:
Employee.find({ "departmentsLength": { "$gt": 0 } },function(err,docs) {
})
在"部门长度"你存储的财产。该属性可以编入索引,这样可以提高效率。
答案 1 :(得分:7)
答案 2 :(得分:1)
如果有人在寻找数组长度大于一个值,你可以像下面那样做,
db.collection.find({ field : { $size: { $gt : 0 } }})
上面的查询将检查该字段中是否至少有一个值
答案 3 :(得分:0)
可以像这样使用$where:
await EmployeeSchema.find( {$where:'this.departments.length>0'} )