猫鼬:查询数组的长度是否大于0

时间:2020-10-01 21:40:01

标签: node.js mongodb express mongoose mongodb-query

注意:

我尝试了所有其他问题的解决方案,其中大多数已经过时了

我需要查询请求者数量大于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);

1 个答案:

答案 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