我有一个如下的房间模式:
let roomSchema = new mongoose.Schema({
events: [{type: mongoose.Schema.ObjectId, ref: 'Event'}],
name: { type: String, required: true, index: { unique: true } }
});
它包含一个事件ID数组。事件架构:
let eventSchema = new mongoose.Schema({
title: { type: String, required: true },
room: { type: mongoose.Schema.ObjectId, ref: 'Room', required: true },
date: { type: Date, required: true },
slot: { type: Number, required: true }
});
我试过这样的东西:
this.model.find(req.query).populate({
path: 'events',
match: {
date: { $ne: req.query.date },
slot: { $ne: req.query.slot }
}
}).exec((err, rooms) => {
rooms = rooms.filter((room) => {
return room.events != null;
});
res.status(200).json(rooms);
});
但它当然不起作用(房间总是空数组)。我真的很难弄清楚。
如何查询具有基于子文档(事件)的条件的文档(房间)?
this.model.find(req.query).populate({
path: 'events',
match: {
$and: [
{ date: { $eq: date } },
{ slot: { $eq: slot } }
]
}
}).exec((err, reservedRooms) => {
reservedRooms = reservedRooms.filter(room => room.events.length > 0);
res.status(200).json(reservedRooms);
});
填充为事件数组中的每个事件应用匹配条件。
因此,当对事件数组的每个元素应用否定时,当您获得填充数组时,存在可用事件(匹配)的数组与没有可用事件(不匹配)的数组之间的区别就消失了。
因此,必须使用server$lookup
对整个数组应用条件。
this.model.aggregate([
{
"$match":{"events":{"$exist":true}}
},
{
"$lookup": {
"from": "events", // Collection name not model or schema name
"localField": "events",
"foreignField": "_id",
"as": "events"
}
},
{
"$match":{"$not":{"$elemMatch":{"date": date, "slot":slot}}}
}
]).exec((err, reservedRooms) => {});
这将输出带有事件的房间。您可以使用带有排除的$project
从最终输出中删除事件。添加{$project:{“events”:0}}
作为最后阶段。
我试图编写一个μn XSLT(1.0版)转换器,将输入的xml文件转换成另一种格式,运行一些用xml文件编写的xpath查询。Xpath查询根据从inptu文件中检索的系统和类型变量而变化。我做到了: 计算系统和类型后,我能够检索我的查询 xpath,如下所示: 如果我打印,一切看起来都不错: 当我尝试将$metadata_mapping作为xpath查询计算时: 我得到以下错误: 17:19:4
我想只从我的两个对象数组和中得到那些符合标准的子文档。即使我已经找到了这个stackoverflow答案#2(根据标准查找猫鼬子文档),它对我来说并不像期望的那样工作,或者我错过了一些东西。 我的文档如下所示: 它将在和中打印项目及其所有子文档。但是,我只想获取与给定上载id匹配的子文档。我做错了什么? 编辑:这个问题是指用猫鼬来解决它。我不能在Mongoose中使用这个问题的集合语句(只检索Mo
我有一个MongoDB存储来自不同传感器的数据。它具有以下结构: 例如,现在我需要“heart rate”-文档的所有字段和“data”-子文档的所有字段都符合条件“时间戳在1483537204000和1483537214000之间”。
问题内容: 我有一个MongoDB,用于存储来自不同传感器的数据。它具有以下结构: 现在,例如,我需要“心率”-包含所有字段和“数据”字段的文档-匹配条件“ 1483537204000和1483537214000之间的时间戳记”的子文档。 我已经在另一个问题中的mongo shell中获得了有关如何执行此操作的答案。参见以下代码: 但是如何在java spring-data中做到这一点?似乎在sp
我有一个表“Quote”,映射在hibernate中,它有一个由整数id和日期组成的复合键,还有几个附加列。我想编写一个条件查询,它使用DetachedCriteria来获取每个id中日期最长的行。 在sql中,我可能会编写一个查询,比如 在hibernate中,我认为可以像这样为“group by”子查询创建DetachedCriteria(其中Quote是映射表的类,“Qid”是键的复合id类
问题内容: 我刚刚陷入这个问题。我有两种猫鼬模式: 问题是,如何从每个父文档中获取所有子文档(在这种情况下为对象)?假设我有一些数据: 我想通过一个查询来检索所有18岁以上的孩子。每个答案将不胜感激,谢谢! 问题答案: 您可以在最新的MongoDB版本中用作查询投影运算符。从mongo shell: 这会从数组中过滤掉较小的儿童文档: 如您所见,子代仍在其父文档中分组。MongoDB查询返回集合中