我在nodejs里用猫鼬。我试图查询一些包含由引用对象组成的列表的字段。我创建了两个模式
导频
var PilotSchema = new mongoose.Schema({
races: [{type: mongoose.Schema.Types.ObjectId, ref: 'Race'}],
});种族
var RaceSchema = new mongoose.Schema({
start_ms: Number,
});这里我只写了相关的字段。
在竞赛模式中,我有一个键start_ms,它以毫秒表示比赛的开始日期,而在PilotSchema races字段中,我保存了对许多种族的引用。
我想做的是:
milliseconds
中没有赛跑的飞行员
我试着做一个例子来更好地解释。
我的日期:2020年2月23日- 12:00:00 (毫秒),
在导航仪领域,races,我有许多折射到RaceSchema和在每一个被折射的物体,这是开始比赛的时间。
现在,查询飞行员集合,我想检索所有飞行员,在他们的races字段中没有比赛期间开始(Feb 23 2020 - 10:00:00 - Feb 23 2020 - 14:00:00)
我试过使用这个查询,但没有工作
races: {$not:
{$elemMatch:
{start_ms:
{ "$gt" : min_time, "$lt" : max_time }
}
}
}哪里
min_time, max_time = my_date - 2_hours, my_date + 2_hours实际上,我不知道如何做到这一点,我看到为了在空隙中检索一个数字,我可以使用$gt和$lt,但我不知道如何查询一个符合这种特定条件的引用对象数组。
发布于 2020-02-06 13:41:02
您必须为此编写一个聚合查询,从races中查找您的引用,并根据您的情况对它们进行筛选
Pilot.aggregate([
{
$lookup:{
from:'races',
localField:'races',
foreignField:'_id',
as:'races'
}
},{
$unwind:'$races'
},
{
$match:{
'races.start_ms':{
"$gt" : min_time, "$lt" : max_time
}
}
},{
$group:{
_id:'$_id',
name:{$first:'$name'}
}
}
]);假设您的name模式中有pilot,则可以通过编写此查询获得所有此类pilots的列表。
https://stackoverflow.com/questions/60094258
复制相似问题