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

伍特

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

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直接存储在匹配文档中,在这种情况下,然后可以使用一个查询。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

猫鼬通过引用属性查找文档

来自分类Dev

从引用的猫鼬模式中找到平均值

来自分类Dev

从引用的猫鼬模式中找到平均值

来自分类Dev

猫鼬文档过滤属性

来自分类Dev

在猫鼬中,如何仅删除集合中找到的一个文档?

来自分类Dev

在猫鼬中,如何仅删除集合中找到的一个文档?

来自分类Dev

猫鼬找到特定领域的x文档

来自分类Dev

猫鼬-如何引用嵌入文档元素?

来自分类Dev

猫鼬-引用子文档的ObjectId

来自分类Dev

猫鼬-引用子文档的ObjectId

来自分类Dev

在findOneAndUpdate之后保存对猫鼬文档的引用

来自分类Dev

在猫鼬中访问子文档属性

来自分类Dev

根据对象属性查询猫鼬文档

来自分类Dev

无法从猫鼬文档访问某些属性

来自分类Dev

猫鼬查询子文档属性

来自分类Dev

猫鼬:如何查询引用对象的属性?

来自分类Dev

如何通过查询子文档找到猫鼬文档?

来自分类Dev

如何通过查询子文档找到猫鼬文档?

来自分类Dev

如何在猫鼬中找到随机记录

来自分类Dev

我如何从猫鼬的数组中找到对象

来自分类Dev

通过id在数组猫鼬中找到对象

来自分类Dev

如何在猫鼬模型内部的数组中找到对象?

来自分类Dev

我如何从猫鼬的数组中找到对象

来自分类Dev

无法通过ID在猫鼬中找到记录

来自分类Dev

猫鼬如何从对象中找到所有数据?

来自分类Dev

猫鼬找到返回的未定义文档

来自分类Dev

猫鼬-子模式引用父子文档

来自分类Dev

如何在猫鼬中设置引用文档_id可选?

来自分类Dev

猫鼬无法使用$ in运算符找到引用