繁体   English   中英

在引用的文档属性中找到猫鼬

[英]Mongoose find in referenced document properties

我在查询时会发疯,以根据引用的文档属性找到匹配项。 我已经定义了这样的架构:

mongoose.model('Route', new mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
}));

mongoose.model('Match', new mongoose.Schema({
    route: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Route'
    }
}));

因此,当我在Match模型中搜索来自特定用户的路线时,我会做类似的事情(也尝试了不带'_id'属性的情况):

match.find({'route.user._id': '53a821577a24cbb86cd290d0'}, function(err, docs){});

但不幸的是,它没有给我任何结果。 我也尝试填充模型:

match.find({'route.user._id': '53a821577a24cbb86cd290d0'}).populate('route').exec(function(err, docs){});

但这并没有什么不同。 我知道的解决方案(但不要认为它们是最干净的):

  1. 查询所有结果并进行遍历,按代码过滤
  2. 将嵌套文档另存为路由模型内的数组(而不是引用)

有人建议吗? 提前谢谢了!

相关问题(但未提供有效的解决方案):

我在查询时会发疯,以基于嵌套文档属性查找匹配项

您没有嵌套的文档。 您具有引用,这些引用只是指向驻留在其他集合中的文档的ID。 这是您的基本断开连接。 如果确实有嵌套文档,则查询将匹配。

您遇到“ mongodb不执行联接”的情况。 每个MongoDB查询都可以在一个且只有一个集合中搜索文档。 您的“匹配”模型指向一个路由,而该路由指向一个用户,但是该匹配并不直接了解该用户,因此您的架构不支持您要执行的查询。 您可以先搜索“ routes”集合,然后使用该查询的结果来找到相应的“ match”文档,或者可以取消规范化模式,并将routeId和userId直接存储在匹配文档中,在这种情况下,然后可以使用一个查询。

根据您的问题标题,您似乎想要嵌套的文档,但是您在猫鼬中将它们定义为引用,而不是真正的嵌套模式。 使用完全嵌套的架构并修复数据,然后您的查询应开始匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM