Mongoose:查询参考文档数组上的字段,[重复]
Posted
技术标签:
【中文标题】Mongoose:查询参考文档数组上的字段,[重复]【英文标题】:Mongoose : query on a field on an array of ref documents, [duplicate] 【发布时间】:2015-10-04 06:06:18 【问题描述】:这是我的模型:
var LocationSchema = new Schema(
events: [
type: mongoose.Schema.Types.ObjectId,
ref: 'Event'
]
)
var EventSchema = new Schema(
title : String,
location:
type: mongoose.Schema.Types.ObjectId,
ref: 'Location'
)
我想从 Location 模型中查询 Event 模型中的一个字段。
下面的不行
findOne(events: $elemMatch: title: 'test')
我什至不确定这是否可能......
【问题讨论】:
不可能,这就是你使用 emedding 的原因。文档中的某处显示使用.filter()
,
谢谢你们,我已经完成了填充,但是请求所有文档并在之后过滤并不是太贪心?
当您在 Event 模型/集合中查找某些内容时,为什么要从 Location 进行查询?
@robertklep 因为我的 Location 模型中有我想选择的字段
【参考方案1】:
当您使用引用时,您可以使用population 对引用的文档运行“子查询”以选择应包含哪些文档。
Location.find( ... ).populate(
path : 'events',
match : title : 'test'
).exec(...);
哪种方式(查询Location
并填充Event
,或相反)取决于您需要运行的确切查询。在产生最少结果的模型上运行“主”查询是最高效的。
此方法仍将返回与主查询匹配的所有文档,您必须执行一些后处理来过滤没有任何匹配事件引用的文档。
【讨论】:
如何在不编写两个查询的情况下以另一种方式查询(如果您对位置的选择标准很少)?以上是关于Mongoose:查询参考文档数组上的字段,[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose,在子文档数组上应用`.aggregate()`,并以最少的查询次数获得文档其他字段的结果
如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?
在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档
从 Mongoose Find() 查询向对象数组添加属性 [重复]