我在查询上疯狂,根据引用的文档属性查找匹配项。 我已经定义了这样的架构:
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'
}
}));
因此,当我在匹配模型中搜索来自特定用户的路线时,我会做类似的事情(也尝试没有' _id'属性):
match.find({'route.user._id': '53a821577a24cbb86cd290d0'}, function(err, docs){});
但不幸的是,它并没有给我任何结果。我也试图填充模型:
match.find({'route.user._id': '53a821577a24cbb86cd290d0'}).populate('route').exec(function(err, docs){});
但这并没有什么不同。我所知道的解决方案(但不要认为它们是最好的):
有人建议吗?非常感谢提前!
相关问题(但不是提供的工作解决方案):
答案 0 :(得分:5)
我在查询时很难找到基于嵌套文档属性的匹配
您没有嵌套文档。您有引用,它们只是指向驻留在其他集合中的文档的ID。这是您的基本断开连接。如果您确实拥有嵌套文档,那么您的查询将匹配。
你遇到了“mongodb不做加入”的情况。每个MongoDB查询都可以在一个且仅一个集合中搜索文档。您的“匹配”模型指向路由,并且路由指向用户,但匹配并不直接了解用户,因此您的架构不支持您要执行的查询。您可以先搜索“routes”集合并使用该查询的结果查找相应的“匹配”文档,或者您可以对模式进行反规范化并将routeId和userId直接存储在匹配文档中,在这种情况下,您可以然后可以使用单个查询。
根据您的问题标题,您似乎想要嵌套文档,但是您在mongoose中将它们定义为引用而不是真正的嵌套模式。使用完整的嵌套模式并修复数据,然后您的查询应该开始匹配。