populate in mongoose 是什么意思?
what does populate in mongoose mean?
我遇到了以下我无法理解的代码行,尽管有很多教程提供了与 populate
示例相关的信息,但是 none 解释了确切的内容它 means.Here 是一个例子
var mongoose = require('mongoose'), Schema = mongoose.Schema
var PersonSchema = new Schema({
name : String,
age : Number,
stories : [{ type: Schema.ObjectId, ref: 'Story' }]
});
var StorySchema = new Schema({
_creator : {
type: Schema.ObjectId,
ref: 'Person'
},
title : String,
fans : [{ type: Schema.ObjectId, ref: 'Person' }]
});
var Story = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);
Story.findOne({ title: /Nintendo/i }).populate('_creator') .exec(function (err, story) {
if (err) ..
console.log('The creator is %s', story._creator.name);
// prints "The creator is Aaron"
})
populate()
mongoose 中的函数用于填充引用中的数据。在您的示例中,StorySchema
具有 _creator
字段,该字段将引用 _id
字段,该字段基本上是 mongodb 文档的 ObjectId
。
populate() function can accept a string or an object as an input.
其中string是需要填写的字段名。在你的情况下是 _creator
。在 mongoose 从 mongodb 找到一份文档后,结果如下
_creator: {
name: "SomeName",
age: SomeNumber,
stories: [Set Of ObjectIDs of documents in stories collection in mongodb]
},
title: "SomeTitle",
fans: [Set of ObjectIDs of documents in persons collection in mongodb]
populate can also accept the object as an input.
您可以在这里找到 mongoose 的 populate()
函数的文档:
http://mongoosejs.com/docs/2.7.x/docs/populate.html or https://mongoosejs.com/docs/populate.html
我偶然遇到了这个问题,但我觉得我需要在这里提供帮助,即使它是旧的,因为我不相信它的解释方式:
Populate() function populate...
对于以英语为母语的人来说,这可能很清楚,但对其他人来说可能不是。
简而言之
Populate 将自动用其他集合中的文档替换文档中的指定路径。
长版
让我们举个例子:
Story.findOne({ title: Nintendo })
会 return 那种故事 :
{
_creator : A0jfdSMmEJj9, //id of the creator (totally random, just for a clear example)
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88] // again, totally random that I've typed here
}
}
在某些情况下,这种要求就足够了,因为我们不关心作者或粉丝,所以有一些 ID 不会太困扰我们。
但是如果我需要 _creator
的名字,我需要再次请求在数据库中找到它。
除了,在 mongoose 中,我们有一个名为 populate() 的聪明函数,我们可以将其链接到我们之前的请求,以便直接在我们的答案中获取该信息,而无需明确地执行额外的请求。
Story.findOne({ title: Nintendo }).populate('_creator')
将return
{
_creator : {
_id : A0jfdSMmEJj*9,
name: Sai,
age: 100,
stories : [fdsfdsfdsew38u, 89hr3232, ...]
},
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88]
}
}
但也许,这些信息太多了,我们不想要他写的故事和他的年龄和名字就足够了。填充可以然后采用包含我们需要的字段的其他参数
Story.findOne({ title: Nintendo }).populate('_creator', 'name age')
结果 ==>
{
_creator : {
name: Sai,
age: 100,
},
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88]
}
}
填充是用其他集合中的文档自动替换文档中指定路径的过程。我们可以填充单个文档、多个文档、一个普通对象、多个普通对象或从查询中 return 编辑的所有对象。让我们看一些例子。
让我解释一下,如果您正在制作博客 post 并且您想要添加一个选项,其中的内容 reader 可以知道博客的作者,以便您可以在以下方式:
Blog.findOne({title:a random blog})
另一方面,如果您想 return 写博客的博主的 ID 和信息,您可以这样做:
Blog.findOne({title:a random blog}).populate(blogger)
您可以通过多种方式使用它,这只是其中的一个示例。
.populate() 用于仅提供所需信息。
没有 .populate() 的示例
User.findOne({ name: Bob })
会return
{
Bob : {
_id : dasd348ew,
email: bob@example.com,
age: 25,
job: teacher,
nationality: American,
}
}
带有 .populate() 的示例
User.findOne({ name: Bob }).populate("Bob", "job email")
会return
{
Bob : {
job: teacher,
email: bob@example.com,
}
}
当您阅读 (我很感激),但它并不完整。因此我决定写我自己的答案(因为此时编辑队列已满)。
但是如果您需要跨多个级别填充。我们可以获得用户的朋友列表,但是如果我们想检索用户的朋友的朋友,我们可以像这样点它:
const userSchema = new Schema({
name: String,
friends: [{ type: ObjectId, ref: 'User' }]
});
User.
findOne({ name: 'Val' }).
populate({
path: 'friends',
// Get friends of friends - populate the 'friends' array for every friend
populate: { path: 'friends' }
});
我遇到了以下我无法理解的代码行,尽管有很多教程提供了与 populate
示例相关的信息,但是 none 解释了确切的内容它 means.Here 是一个例子
var mongoose = require('mongoose'), Schema = mongoose.Schema
var PersonSchema = new Schema({
name : String,
age : Number,
stories : [{ type: Schema.ObjectId, ref: 'Story' }]
});
var StorySchema = new Schema({
_creator : {
type: Schema.ObjectId,
ref: 'Person'
},
title : String,
fans : [{ type: Schema.ObjectId, ref: 'Person' }]
});
var Story = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);
Story.findOne({ title: /Nintendo/i }).populate('_creator') .exec(function (err, story) {
if (err) ..
console.log('The creator is %s', story._creator.name);
// prints "The creator is Aaron"
})
populate()
mongoose 中的函数用于填充引用中的数据。在您的示例中,StorySchema
具有 _creator
字段,该字段将引用 _id
字段,该字段基本上是 mongodb 文档的 ObjectId
。
populate() function can accept a string or an object as an input.
其中string是需要填写的字段名。在你的情况下是 _creator
。在 mongoose 从 mongodb 找到一份文档后,结果如下
_creator: {
name: "SomeName",
age: SomeNumber,
stories: [Set Of ObjectIDs of documents in stories collection in mongodb]
},
title: "SomeTitle",
fans: [Set of ObjectIDs of documents in persons collection in mongodb]
populate can also accept the object as an input.
您可以在这里找到 mongoose 的 populate()
函数的文档:
http://mongoosejs.com/docs/2.7.x/docs/populate.html or https://mongoosejs.com/docs/populate.html
我偶然遇到了这个问题,但我觉得我需要在这里提供帮助,即使它是旧的,因为我不相信它的解释方式:
Populate() function populate...
对于以英语为母语的人来说,这可能很清楚,但对其他人来说可能不是。
简而言之
Populate 将自动用其他集合中的文档替换文档中的指定路径。
长版
让我们举个例子:
Story.findOne({ title: Nintendo })
会 return 那种故事 :
{
_creator : A0jfdSMmEJj9, //id of the creator (totally random, just for a clear example)
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88] // again, totally random that I've typed here
}
}
在某些情况下,这种要求就足够了,因为我们不关心作者或粉丝,所以有一些 ID 不会太困扰我们。
但是如果我需要 _creator
的名字,我需要再次请求在数据库中找到它。
除了,在 mongoose 中,我们有一个名为 populate() 的聪明函数,我们可以将其链接到我们之前的请求,以便直接在我们的答案中获取该信息,而无需明确地执行额外的请求。
Story.findOne({ title: Nintendo }).populate('_creator')
将return
{
_creator : {
_id : A0jfdSMmEJj*9,
name: Sai,
age: 100,
stories : [fdsfdsfdsew38u, 89hr3232, ...]
},
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88]
}
}
但也许,这些信息太多了,我们不想要他写的故事和他的年龄和名字就足够了。填充可以然后采用包含我们需要的字段的其他参数
Story.findOne({ title: Nintendo }).populate('_creator', 'name age')
结果 ==>
{
_creator : {
name: Sai,
age: 100,
},
title : Nintendo,
fans : [r432i900fds09809n, fdsjifdsjfueu88]
}
}
填充是用其他集合中的文档自动替换文档中指定路径的过程。我们可以填充单个文档、多个文档、一个普通对象、多个普通对象或从查询中 return 编辑的所有对象。让我们看一些例子。
让我解释一下,如果您正在制作博客 post 并且您想要添加一个选项,其中的内容 reader 可以知道博客的作者,以便您可以在以下方式:
Blog.findOne({title:a random blog})
另一方面,如果您想 return 写博客的博主的 ID 和信息,您可以这样做:
Blog.findOne({title:a random blog}).populate(blogger)
您可以通过多种方式使用它,这只是其中的一个示例。
.populate() 用于仅提供所需信息。
没有 .populate() 的示例
User.findOne({ name: Bob })
会return
{
Bob : {
_id : dasd348ew,
email: bob@example.com,
age: 25,
job: teacher,
nationality: American,
}
}
带有 .populate() 的示例
User.findOne({ name: Bob }).populate("Bob", "job email")
会return
{
Bob : {
job: teacher,
email: bob@example.com,
}
}
当您阅读
但是如果您需要跨多个级别填充。我们可以获得用户的朋友列表,但是如果我们想检索用户的朋友的朋友,我们可以像这样点它:
const userSchema = new Schema({
name: String,
friends: [{ type: ObjectId, ref: 'User' }]
});
User.
findOne({ name: 'Val' }).
populate({
path: 'friends',
// Get friends of friends - populate the 'friends' array for every friend
populate: { path: 'friends' }
});