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() 查询向对象数组添加属性 [重复]

从 Mongoose Find() 查询向对象数组添加属性 [重复]

查询未在 Mongoose 模型中定义的文档