gpt4 book ai didi

node.js - Mongoose 在引用的文档属性中查找

转载 作者:可可西里 更新时间:2023-11-01 09:59:10 26 4
gpt4 key购买 nike

我正在疯狂地查询以根据引用的文档属性查找匹配项。我已经这样定义了我的模式:

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. 将嵌套文档保存为路由模型中的数组(因此不是引用)

有人建议吗?非常感谢!

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

最佳答案

I'm going nuts on a query to find a match based on nested document properties

您没有嵌套文档。您有引用,它们只是指向驻留在其他集合中的文档的 ID。这是你的基本脱节。如果您真的有嵌套文档,您的查询就会匹配。

你遇到了“mongodb does not do joins”的情况。每个 MongoDB 查询只能在一个集合中搜索文档。你的“匹配”模型指向一个路由,路由指向一个用户,但是匹配并不直接了解用户,所以你的模式不支持你想做的查询。您可以先搜索“routes”集合并使用该查询的结果来查找相应的“匹配”文档,或者您可以将您的模式去规范化并将 routeId 和 userId 直接存储在匹配文档中,在这种情况下您然后可以使用单个查询。

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

关于node.js - Mongoose 在引用的文档属性中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com