填充引用对象,它也是一个引用对象 mongoose
Populate reference object which is also a reference object mongoose
我有一个名为 Message 的模式,定义如下:
const messageSchema = new mongoose.Schema({
name : {type : String}
});
module.exports('Message',messageSchema);
我有另一个名为 Topic 的架构,它使用 'Message' 作为参考对象。
const topicSchema = new mongoose.Schema({
topics : { type : mongoose.Schema.Types.ObjectId , ref : 'Message' }
});
module.exports('Topic',topicSchema);
我有一个名为 Thread 的模式,它使用 'Topic' 个对象引用数组。
const threadSchema = new mongoose.Schema({
thread : [{ type : mongoose.Schema.Types.ObjectId , ref : 'Topic' }],
name : {type : String}
});
module.exports('Thread',threadSchema);
如果我们有 'Thread' 文档,如何访问所有 'Message' 元素?
我尝试执行以下操作:
Thread.findOne({name : 'Climate'}).populate('thread').populate('topics').exec(function(err,data){})
但由于 thread population 有一个数组,所以我收到了错误。请帮助正确取消引用 message 对象。
经过进一步调查,我能够解决问题。描述了一种不涉及嵌套 exec
语句的简单解决方案。
const myThread = await Thread.find({name : "Climate"}).populate('thread');
//This populates the 'thread' component of the Thread model, which is essentially an array of 'Topic' elements.
由于我们已将 'thread' 字段填充为数组,因此我们可以遍历该字段的每个成员,用基础 'message' 模型填充 'topic' 字段。
const myTopic = myThread.thread;
for(let i = 0; i < myTopic.length ; i++)
{
myCurrentTopic = myTopic[i];
var myTopicPopulated = await Topic.find({_id : myCurrentTopic._id}).populate('topic');
//Do further processing
}
这是一种处理此类情况的简单方法,无需使用 path
代理。
我有一个名为 Message 的模式,定义如下:
const messageSchema = new mongoose.Schema({
name : {type : String}
});
module.exports('Message',messageSchema);
我有另一个名为 Topic 的架构,它使用 'Message' 作为参考对象。
const topicSchema = new mongoose.Schema({
topics : { type : mongoose.Schema.Types.ObjectId , ref : 'Message' }
});
module.exports('Topic',topicSchema);
我有一个名为 Thread 的模式,它使用 'Topic' 个对象引用数组。
const threadSchema = new mongoose.Schema({
thread : [{ type : mongoose.Schema.Types.ObjectId , ref : 'Topic' }],
name : {type : String}
});
module.exports('Thread',threadSchema);
如果我们有 'Thread' 文档,如何访问所有 'Message' 元素?
我尝试执行以下操作:
Thread.findOne({name : 'Climate'}).populate('thread').populate('topics').exec(function(err,data){})
但由于 thread population 有一个数组,所以我收到了错误。请帮助正确取消引用 message 对象。
经过进一步调查,我能够解决问题。描述了一种不涉及嵌套 exec
语句的简单解决方案。
const myThread = await Thread.find({name : "Climate"}).populate('thread');
//This populates the 'thread' component of the Thread model, which is essentially an array of 'Topic' elements.
由于我们已将 'thread' 字段填充为数组,因此我们可以遍历该字段的每个成员,用基础 'message' 模型填充 'topic' 字段。
const myTopic = myThread.thread;
for(let i = 0; i < myTopic.length ; i++)
{
myCurrentTopic = myTopic[i];
var myTopicPopulated = await Topic.find({_id : myCurrentTopic._id}).populate('topic');
//Do further processing
}
这是一种处理此类情况的简单方法,无需使用 path
代理。