在猫鼬模式中填充嵌套对象的字段
populate fields of nested object in mongoose schema
我有这两个型号
var postSchema = new Schema({
content : String,
author : [{
user : {
type: Schema.ObjectId,
ref: 'user'
},
bool: Boolean
}]
});
var userSchema = new Schema({
name : String
});
我正在尝试使用用户名填充 Post 而不是仅显示 [Object] 或 id if i .toString it
我现在得到的是什么:
{ author: [ [Object], [Object], [Object] ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 } ]
用 .toString() 我得到
{ author:
[ { _id: 5aedc364ce3b022d4ff74922,
user: 5aedb9e47e055d1ac26aa572,
bool: true } ]
我想要什么:
{ author:
[ { _id: 5aedc4d3c534213279faec7c,
user: "Some name here", //( name instead of user _id )
bool: true },
{ _id: 5aedc4d3c534213279faec7b,
user: "Some name here",
bool: false },
{ _id: 5aedc4d3c534213279faec7a,
user: "Some name here",
bool: true } ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 }
这可能吗?
您可以使用嵌套语法的填充方法
const Post = mongoose.model('Post', postSchema);
const User = mongoose.model('User', userSchema);
Post
.find({})
.populate({path:'author.user', 'model':'User'})
.exec((err, posts) => {
if (err) return next(err);
posts.forEach(post => {
console.log(JSON.stringify( post, null, 2) ); // spacing level = 2
}
});
将为每个 post 输出(这不是您所需要的,但希望您可以灵活地使用 User
格式
{
_id: 5aedc4d3c534213279faec79,
content: 'some content',
author: [
{
user: {_id: 5aedc4d3c534213279faec7c, "user name here"}
bool: true
},
{
user: {_id: 5aedc4d3c534213279faec7b, "user name 2 here"}
bool: true
}
__v: 0
}
参考 mongoose.populate
http://mongoosejs.com/docs/populate.html
我有这两个型号
var postSchema = new Schema({
content : String,
author : [{
user : {
type: Schema.ObjectId,
ref: 'user'
},
bool: Boolean
}]
});
var userSchema = new Schema({
name : String
});
我正在尝试使用用户名填充 Post 而不是仅显示 [Object] 或 id if i .toString it
我现在得到的是什么:
{ author: [ [Object], [Object], [Object] ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 } ]
用 .toString() 我得到
{ author:
[ { _id: 5aedc364ce3b022d4ff74922,
user: 5aedb9e47e055d1ac26aa572,
bool: true } ]
我想要什么:
{ author:
[ { _id: 5aedc4d3c534213279faec7c,
user: "Some name here", //( name instead of user _id )
bool: true },
{ _id: 5aedc4d3c534213279faec7b,
user: "Some name here",
bool: false },
{ _id: 5aedc4d3c534213279faec7a,
user: "Some name here",
bool: true } ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 }
这可能吗?
您可以使用嵌套语法的填充方法
const Post = mongoose.model('Post', postSchema);
const User = mongoose.model('User', userSchema);
Post
.find({})
.populate({path:'author.user', 'model':'User'})
.exec((err, posts) => {
if (err) return next(err);
posts.forEach(post => {
console.log(JSON.stringify( post, null, 2) ); // spacing level = 2
}
});
将为每个 post 输出(这不是您所需要的,但希望您可以灵活地使用 User
格式
{
_id: 5aedc4d3c534213279faec79,
content: 'some content',
author: [
{
user: {_id: 5aedc4d3c534213279faec7c, "user name here"}
bool: true
},
{
user: {_id: 5aedc4d3c534213279faec7b, "user name 2 here"}
bool: true
}
__v: 0
}
参考 mongoose.populate http://mongoosejs.com/docs/populate.html