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