gpt4 book ai didi

mongodb - Mongoose 的深处

转载 作者:行者123 更新时间:2023-12-05 00:41:01 24 4
gpt4 key购买 nike

我有两个模式,

一个用于用户,另一个用于发布

在用户模式中,我有一个 latestPost 属性,它是 post 模式中条目的 ObjectId

当我加载用户对象时,

我想从用户架构中获取 lastestPost 作为一个包含作者用户名的对象,其中作者是一个与用户架构中的 _id 字段匹配的 ObjectId。

mongoose 教程似乎使用了以下语法

User.findOne({ _id: req.user.id})
.populate('latestPost')
.populate({ path: 'latestPost', populate: 'author'})

但它不起作用

它正在显示

{ _id: 58f54fa51febfa307d02d356,
username: 'test',
email: 'test@test',
firstName: 'test',
lastName: 'test',
__v: 0,
latestPost:
{ _id: 58f54fa51febfa307d02d357,
user: 58f54fa51febfa307d02d356,
author: 58f54fa51febfa307d02d356,
date: 2017-04-17T23:28:37.960Z,
post: 'Test',
__v: 0 } }

但我想让它显示出来

  latestPost:
{
author: {
username : something
}
}

如何做这样的事情?架构或查询的设计有问题吗?

var UserSchema = new Schema({
username : String,
firstName : String,
lastName : String,
email : String,
password : String,
views : Number,
latestPost : { type: Schema.Types.ObjectId, ref: 'Post' }
});

var PostSchema = new Schema({
user : { type: Schema.Types.ObjectId, ref: 'User' },
author : { type: Schema.Types.ObjectId, ref: 'User' },
date : Date,
body : String
});

var User = mongoose.model('User', UserSchema);
var Post = mongoose.model('Post', PostSchema);

User.findOne({ _id: req.user.id})
.populate('latestPost')
.populate({ path: 'latestPost', populate: 'author'})
.exec(function(err, user) {
if (err) res.json(err)
console.log(user)
})

最佳答案

也许只是这个。

我认为您不需要 .populate('latestPost') 因为您的下一个 .populate() 应该负责填充 latestPost。也许这会干扰下一个。

User.findOne({ _id: req.user.id }).populate({ 
path: 'latestPost',
model: 'Post',
populate: {
path: 'author',
model: 'User'
}
}).exec(function (err, user) {

});

关于mongodb - Mongoose 的深处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461294/

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