Node.js 如何在mongodb中使用文档值长度进行搜索查询
在我的收藏中,我有一些小组,他们可以将成员限制在其中。我想通过搜索表单中给定的数字查询所有有足够空间的组。我在API中使用mongoose和node 因此,当组中有2个成员时,限制为3,用户搜索组中剩下的2个位置。这群人不会出现,但会出现其他人 我如何质疑这一点?我已经找到了类似于Node.js 如何在mongodb中使用文档值长度进行搜索查询,node.js,mongodb,mongoose,schema,Node.js,Mongodb,Mongoose,Schema,在我的收藏中,我有一些小组,他们可以将成员限制在其中。我想通过搜索表单中给定的数字查询所有有足够空间的组。我在API中使用mongoose和node 因此,当组中有2个成员时,限制为3,用户搜索组中剩下的2个位置。这群人不会出现,但会出现其他人 我如何质疑这一点?我已经找到了类似于query的东西。$expr={$gt:[{$strLenCP:$members},params.searchValue/*2在我的示例中*/]}”+params.searchValue但那不起作用。你试错了。最好使用
query的东西。$expr={$gt:[{$strLenCP:$members},params.searchValue/*2在我的示例中*/]}但是我真的不明白
这里是我的猫鼬模式:
let GroupSchema = new Schema({
name: {
type: String,
required: true
},
status: {
type: String,
required: true
},
game: {
type: Schema.Types.ObjectId,
ref: 'Games',
required: true
},
alias: {
type: String,
required: true,
unique: true
},
owner: {
type: Schema.Types.ObjectId,
ref: 'User'
},
range: Number,
image: String,
description: String,
members: [{
type: Schema.Types.ObjectId,
ref: 'User'
}],
updated: Date,
created: Date
});
你找错操作员了。文档中的members
属性是一个“数组”。在所有MongoDB版本中,都有查询数组长度的成熟方法。也就是说,如果长度(成员数)是对您很重要的查询类型,您可能“应该”创建一个文档属性来指示长度。@NeilLunn我尝试了这个答案,并将其更新为我的公式:query.$where=“(this.members.length-this.range)>”+params.searchValue代码>但那不起作用。你试错了。最好使用$exists
即{“members.0”:{“$exists”:true},“members.2”:{“$exists”:true}
表示长度在2到3个项目之间的数组。还有一些“其他”建议不使用$where
,它们也适用于您的情况。与文档中的字段进行比较是另一个条件。您确实不应该简单地存储一个“availableSpots”
数字,在向数组添加新成员时,您只需将该数字递减即可。