gpt4 book ai didi

node.js - 在 mongoose 中填充嵌套数组 - Node.js

转载 作者:IT老高 更新时间:2023-10-28 13:23:33 25 4
gpt4 key购买 nike

这些是我的架构(主题是父主题,包含“思想”列表):

var TopicSchema = new mongoose.Schema({
title: { type: String, unique: true },
category: String,
thoughts: [ThoughtSchema]
}, {
timestamps: true,
toObject: {virtuals: true},
toJSON: {virtuals: true}
});

var ThoughtSchema = new mongoose.Schema({
text: String,
author: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
votes:[{
_id:false,
voter: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
up: Boolean,
date: {type: Date, default: Date.now}
}]
}, {
timestamps: true,
toObject: {virtuals: true},
toJSON: {virtuals: true}
});

....

我正在尝试阅读该想法的作者并像这样更改我的 get Topic api:

...
var cursor = Topic.find(query).populate({
path: 'thoughts',
populate: {
path: 'author',
model: 'User'
}
}).sort({popularity : -1, date: -1});

return cursor.exec()
.then(respondWithResult(res))
.catch(handleError(res));
...

但是作者是空的..我也没有在控制台中得到任何错误。这里有什么问题?

编辑:实际上我不需要 Thought 作为模式,它在数据库中没有自己的集合。它将保存在主题中。但是为了将 timestamps 选项与想法一起使用,我需要将其内容提取到新的本地模式 ThoughtSchema。但是我现在已经直接在主题的想法数组中定义了thinkSchema的内容,还是不行。

Edit2:这是执行前的光标对象。不幸的是,我无法在 Webstorm 中调试,这是来自 Node 检查器的屏幕截图:

enter image description here

最佳答案

您是否尝试过使用 Model.populate ?

Topic.find(query).populate('thoughts')
.sort({popularity : -1, date: -1})
.exec(function(err, docs) {
// Multiple population per level
if(err) return callback(err);
Thought.populate(docs, {
path: 'thoughts.author',
model: 'User'
},
function(err, populatedDocs) {
if(err) return callback(err);
console.log(populatedDocs);
});
});

更新:
你可以试试deep populate像这样:

Topic.find(query).populate({
path: 'thoughts',
populate: {
path: 'author',
model: 'User'
}
})
.sort({popularity : -1, date: -1})
.exec(function(err, docs) {
if(err) return callback(err);
console.log(docs);
});

关于node.js - 在 mongoose 中填充嵌套数组 - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761584/

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