【发布时间】:2018-04-18 16:37:26
【问题描述】:
我在使用 model.find 返回与嵌套模式中的变量条件匹配的文档列表时遇到了一些问题。我在这个项目中使用 node、express 和 mongoose。
理想情况下,我想在查询中使用一个变量作为对象键,这样我就可以动态地获取星期几并检查营业时间。到目前为止,我还没有成功地在网上找到答案。
这是我的模型。
const restaurantSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true },
coordinates: {
latitude: { type: Number, required: true },
longitude: { type: Number, required: true }
},
happy_hour: {
sunday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
monday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
tuesday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
wednesday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
thursday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
friday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
},
saturday: {
open: { type: Boolean },
open_at: { type: Number },
close_at: { type: Number }
}
}
});
这是来自控制器的一个 sn-p,它正在处理此快速路由的逻辑。下面的 sn-p 有一个名为“Friday”的静态键,但我想动态获取星期几并将其作为变量传递,例如 $friday: { open: true } 或其他什么。
exports.search = (req, res, next) => {
const radius = req.query.radius || 5;
const latitude = req.query.latitude;
const longitude = req.query.longitude;
const day = date.get_day();
const minutes = date.get_minutes();
console.log(query[day]);
if ( latitude == undefined || longitude == undefined ) {
res.status(404).json({
message: "Missing longitude or latitude"
})
}
Restaurant.find({
hours: {
friday: {
open: true
}
}
})
.exec()
.then(results => {
res.status(200).json({
data: results.map( result => {
【问题讨论】:
-
也许您可以将查询构建为字符串(使用字符串插值),然后将其解析为 JSON:
query = JSON.parse("{hours: {``$day``: {open: true}}}") -
我不熟悉该语句中的语法
$day。它是如何工作的?