我在查询时会发疯,以根据引用的文档属性查找匹配项。我已经定义了这样的架构:
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){});
但这并没有什么不同。我知道的解决方案(但不要认为它们是最干净的):
有人建议吗?提前谢谢了!
相关问题(但未提供有效的解决方案):
我很想查询基于嵌套文档属性的匹配项
您没有嵌套的文档。您具有引用,这些引用只是指向驻留在其他集合中的文档的ID。这是您的基本断开连接。如果您确实有嵌套的文档,则查询将匹配。
您遇到“ mongodb不执行联接”的情况。每个MongoDB查询都可以在一个且只有一个集合中搜索文档。您的“匹配”模型指向一个路由,而该路由指向一个用户,但是该匹配不直接了解该用户,因此您的架构不支持您要执行的查询。您可以先搜索“ routes”集合,然后使用该查询的结果来查找相应的“ match”文档,或者可以取消规范化模式,并将routeId和userId直接存储在匹配文档中,在这种情况下,然后可以使用一个查询。
根据您的问题标题,您似乎想要嵌套的文档,但是您在猫鼬中将它们定义为引用,而不是真正的嵌套模式。使用完全嵌套的架构并修复数据,然后您的查询应开始匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句