【发布时间】:2020-08-11 18:03:06
【问题描述】:
我有一个 mongoose 模型,其中一个字段是日期数组,我需要查询集合以查找该数组中日期介于过去 7 天之间的任何文档,但是当我尝试使用 $gt或 $gte 它不会返回我的文件,即使存在(我已经检查了文件是否存在)。
Here it is an example of the object
它不应该返回超过 7 天的对象。
这是我正在使用的代码:
const { subDays } = require("date-fns");
const mongoose = require("mongoose");
const Journey = require("./models/Journey");
const url = "my-db-url";
mongoose.set("useNewUrlParser", true);
mongoose.set("useUnifiedTopology", true);
mongoose.set("useCreateIndex", true);
mongoose.set("useFindAndModify", false);
mongoose.connect(url, (err) => {
if (err) throw err;
console.log("Mongoose connected");
});
Journey.find({
hospital: "5e6fc0d98db5810012aeb8fe",
active: false,
timestampStart: {
$gte: subDays(new Date(), 7)
}
})
.lean()
.exec((err, journeys) => {
if (err) throw err;
console.log(journeys[0]);
});
旅程模型:
const { Schema, model } = require("mongoose");
const JourneySchema = new Schema(
{
tag: {
type: Schema.Types.ObjectId,
required: true,
ref: "Tag",
},
patient: {
type: Schema.Types.ObjectId,
required: true,
ref: "Patient",
},
hospital: {
type: Schema.Types.ObjectId,
required: true,
ref: "Hospital",
},
department: {
type: [String],
required: true,
},
timestampStart: {
type: [Date],
required: true,
},
timestampEnd: {
type: [Date],
required: true,
},
active: {
type: Boolean,
default: true,
},
rssi: {
type: [String],
required: true,
},
},
{
timestamps: true,
}
);
module.exports = model("Journey", JourneySchema);
谁能帮我建立这个过滤器?
【问题讨论】:
-
您拥有的
$gte过滤器似乎应该适用于日期。我确实注意到示例文档不包含名为active的字段。尝试过滤active: {$ne: true}而不是active: false,这样当活动字段丢失时它也会匹配 -
不错,感谢您的建议。活动字段丢失是因为我使用 select 函数将其删除,但是当我在这里发布时忘记将其添加到查询代码中。