在 Mongoose 中,Schema 定义了数据集合的结构,Model 将 Schema 编译为数据集合的构造函数,而 document 则是从 Model 构造函数创建出的实例对象,它是我们操作数据的主要对象。
在本文中,我们将重点介绍 Mongoose Model 中 document 的相关方法以及使用技巧,希望读者能够在学习中有所收获,掌握好 Mongoose 中的 document 操作。
创建 document 对象
我们可以通过 Model 的构造函数来创建 document 对象,如下所示:
const User = mongoose.model('User', userSchema); const user = new User({ name: 'John Doe', age: 20 });
在上述代码中,User
是 Mongoose Model 的构造函数,user
则是通过 User
构造函数创建出的 document 对象,其中包含 name
和 age
两个字段。
保存 document 对象
一旦我们创建了 document 对象,就可以通过 save
方法将其保存到数据库中,如下所示:
user.save() .then(() => console.log('User saved')) .catch(err => console.error(err));
在上述代码中,我们使用了 save
方法将创建的 user
对象保存到数据库中。保存成功后,then
中的回调函数会被调用,否则 catch
中的回调函数会被调用。
更新 document 对象
如果我们需要更新已存在的 document 对象,我们可以使用 updateOne
或 updateMany
方法,如下所示:
User.updateOne({ name: 'John Doe' }, { age: 30 }) .then(() => console.log('User updated')) .catch(err => console.error(err));
在上述代码中,我们使用了 updateOne
方法将名字为 'John Doe'
的用户的年龄更新为 30
。
删除 document 对象
如果我们需要删除一个或多个 document 对象,可以使用 deleteOne
或 deleteMany
方法,如下所示:
User.deleteOne({ name: 'John Doe' }) .then(() => console.log('User deleted')) .catch(err => console.error(err));
在上述代码中,我们使用了 deleteOne
方法将名字为 'John Doe'
的用户从数据库中删除。
查询 document 对象
如果我们需要根据特定条件查询数据库中的 document 对象,可以使用 Mongoose 提供的查询 API,如下所示:
User.find({ age: { $gt: 18 } }) .then(users => console.log(users)) .catch(err => console.error(err));
在上述代码中,我们使用 find
方法查询了年龄大于 18
的所有用户,并打印出查询结果。
Populating
在数据库查询时,我们经常需要查询一些关联的集合数据,这时就需要使用到 Mongoose 中的 populating 特性。下面是使用 populating 的示例:
-- -------------------- ---- ------- ----- ----------- - --- -------- ----- - ----- ---------------------- ---- ------ -- -------- - ----- ---------------------- ---- --------- - --- ----- ----- - ----------------------- ------------- ----------------------------- ---------------- ------------ -- -------------------- ---------- -- --------------------
在上述代码中,我们定义了一个 order
集合,在其中包含了关联到 user
和 product
两个集合的 ObjectID。当我们需要查询 order
集合时,我们可以通过 .populate()
方法进行关联数据的查询,并通过 .exec()
方法执行当前查询。查询结果会以数组的形式返回,并会包含指定集合的数据。
总结
在 Mongoose 中,document 是操作数据的主要对象,其包含了各种 CRUD 方法以及关联查询、分组聚合等高级特性,能够满足大部分数据库操作需求。在学习 Mongoose 时,对 document 的掌握是至关重要的,希望本文能够对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/665622f6d3423812e4ac8732