我有一个问题,我有一个凌乱的MongoDB数据库,修改了Mongoose方案。
我希望能够使用where
命令进行查询,但如果在任何找到的记录中缺少字段或undefined
,则Mongoose会返回错误。
例如:
return this.find({personID: req.user._id})
.where('rangeBefore').lt(time);
这会返回错误,因为某些记录没有rangeBefore
。
我想要实现的是,没有rangeBefore
字段的任何记录都被过滤掉(即它没有通过where
测试)。
我尝试使用exists
作为前缀:
return this.find({personID: req.user._id})
.exists('rangeBefore').where('rangeBefore').lt(time);
但我仍然收到错误。
有人可以建议一种方法来忽略undefined
个字段的记录,而不是返回错误吗?
答案 0 :(得分:12)
如果您只想修改现有查询:
return this.find({ personID: req.user._id,
rangeBefore: { $exists: true, $ne: null } //also check for nulls
})
.where('rangeBefore').lt(time);
或者,如果适合,您也可以使用回调方法:
this.find({personID: req.user._id,
rangeBefore: { $exists: true, $ne: null, $lt: time }
})
.exec(function(err, record) { });
答案 1 :(得分:3)
你可以这样做,它会返回一个承诺:
find({rangeBefore: { $exists: 1, $lt: time } }).exec()
或使用回调:
find({rangeBefore: { $exists: 1, $lt: time } }).exec(function(err, record){
})
答案 2 :(得分:1)
您的错误消息:
对于值而言,转换为数字失败"未定义"在路径" rangeBefore"
表示您的time
变量为undefined
。像这样的查询自然会忽略rangeBefore
不存在的文档。
问题在于您的time
变量,而不是您的文档或查询。