我正在使用mongoose在MongoDB上执行CRUD操作。这是我的模式。
var EmployeeSchema = new Schema({
name: String,
description: {
type: String,
default: 'No description'
},
departments: []
});
字符串
每个员工可以属于多个部门。部门数组看起来像[1,2,3]。在这种情况下,departments.length = 3。如果员工不属于任何部门,则departments.length将等于0。
我需要找到所有的员工,如果查询返回超过10条记录,我需要得到的部门最大没有员工。
是否可以使用Mongoose.find()来获得所需的结果?
5条答案
按热度按时间jobtbby31#
假设你的模型叫做
Employee
:字符串
因为
$exists
要求数组的0
索引,这意味着它里面有东西。这同样适用于最大数量:
型
所以数组中至少要有10个条目才能匹配。
实际上,你应该记录数组的长度,并在每次添加内容时更新**
$inc
**。然后你可以这样做:型
在您存储的“departmentsLength”属性上。该属性可以被索引,这使得它更有效。
vhipe2zx2#
由于某种原因,选择的答案现在不起作用。有**$size**operator。
使用方法:
字符串
将查找长度为1的数组。
zzoitvuj3#
可以这样使用$where:
字符串
zvokhttg4#
Mongoose中使用虚域计算数组长度的高效方法
我最近在尝试使用Mongoose虚拟字段和预钩子检索数组长度时遇到了一个挑战。尽管数组(this.users)已正确填充并在控制台或调试器中可见,但直接尝试访问this.users.length会导致“Cannot read properties of undefined”错误。
在探索了各种选项之后,我发现了一个简单而有效的解决方案,使用三元检查:
字符串
这种三进制检查确保数组在尝试访问其长度之前存在,从而防止错误。这种方法被证明是一种实用的方法,可以在不诉诸其他数据库查询的情况下获得用户计数。
型
f4t66c6m5#
如果任何人正在寻找数组长度大于1,你可以像下面这样做,
字符串
上面的查询将检查数组字段在第一个索引处是否有值,这意味着它在数组中有超过1个元素。注意:数组索引从0开始。