【发布时间】:2018-06-23 14:12:39
【问题描述】:
不确定这是否会被视为重复,但我已经四处搜索并实施了与我在网上找到的类似的查询,但似乎无法让我的嵌套参考工作。我只是在测试以了解用于填充嵌套引用和嵌套文档的 mongoose 语法,如下所述:Mongoose nested schema vs nested models
但是,我一定遗漏了一些东西,因为它似乎工作但返回一个空的嵌套引用数组。我知道我的查询应该为嵌套引用返回两个结果。
- 我忽略了什么或做错了什么?
- 如果我想使用嵌套文档,如何以不同的方式运行查询?
数据:
结果集合:
{
"_id" : ObjectId("5a4dcbe4ab9a793d888c9396"),
"event_id" : ObjectId("5a482302a469a068edc004e3"),
"event_name" : "Sample Event",
"score" : "3-2",
"winner" : "player1"
},
{
"_id" : ObjectId("5a59791379cc1c321c1918f0"),
"event_id" : ObjectId("5a482302a469a068edc004e3"),
"event_name" : "Sample Event",
"score" : "2-1",
"winner" : "player2"
}
事件集合:
{
"_id" : ObjectId("5a482302a469a068edc004e3"),
"type" : "Tournament",
"name" : "Sample Event"
}
我的代码如下:
var mongoose = require("mongoose");
mongoose.connect("MongoDB://localhost/devDB");
var ResultSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
event_id: {type: mongoose.Schema.Types.ObjectId, ref: "EventModel"},
event_name: String,
score: String,
winner: String
});
var ResultModel = mongoose.model("results", ResultSchema);
var EventSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
type: String,
results: [{type: mongoose.Schema.Types.ObjectId, ref: "ResultModel"}]
});
var EventModel = mongoose.model("events", EventSchema);
function GetEvent(eventid){
// EventModel.findById(eventid)
EventModel.findOne({_id: eventid})
.populate("results","score winner", ResultModel)
//.select("results") to extract only the nested references
.exec(function(err, event){
if (err){
console.log("ERROR fetching doc: ", err.name + ": " + err.message)
} else{
console.log(event);
}
});
}
GetEvent("5a482302a469a068edc004e3");
我运行它时的输出:
{
results: [],
_id: 5a482302a469a068edc004e3,
type: 'Tournament',
name: 'Test Tournament'
}
【问题讨论】:
-
很奇怪。我确定我的数据在一个名为
results的集合中。在我的模式中,我是否通过将 Model 对象作为ref:值而不是集合的名称来做正确的事情?我发现我在不同解决方案中看到的约定非常令人困惑,其中集合的名称与模型对象的名称相同。为了更清楚,我将模型附加到模型的名称中,并使我的所有集合都小写。 -
抱歉,我很困惑...我查看了您的 pastebin,但它不包括您实际运行以获得结果的查询。如果我的模式设置正确,那么问题一定出在我的查询中......你能确认我已经正确设置了我的模式和嵌套吗?这至少会缩小我需要搜索的范围。谢谢。
标签: node.js mongoose mongoose-schema mongoose-populate