Mongoose在向集合中插入文档时的集合命名问题
原文链接:http://www.cnblogs.com/wx1993/p/5243245.html
Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作。
从创建连接到向数据库中写入一个条数据经历了以下步骤:
1.连接数据库,并创建连接;
2.定义UserSchema(相当于数据库建表) ;
3.创建User模型(相当于构建对象和数据库表映射);
4.通过User模块,创建对象
5.通过save方法持久化对象;
(参考博客:Mongoose在创建Model时对Collection的命名策略http://www.tuicool.com/articles/R36bMbA)
如下代码就可以在数据库中创建一个 users ( 为什么是users是本文的重点 ) 集合并插入一条文档:
1 var mongoose = require('mongoose'); 2 var schema = mongoose.Schema; 3 4 // 连接MongoDB 5 mongoose.connect("mongodb://localhost:27017"); 6 7 // 定义模式 8 var userSchema = new schema({ 9 name : String, 10 gender : String, 11 age : Number 12 }); 13 14 // 编译模型 15 var User = mongoose.model('User', userSchema); 16 17 // 新建文档对象实例 18 var user1 = new User ({ 19 name : "Jack", 20 gender : "male", 21 age : 23 22 }); 23 24 // 将文档保存到数据库 25 user1.save(function(err, user1){ 26 if(err){ 27 return console.error(err); 28 }else{ 29 console.info(user1); 30 } 31 });
分析一下上面的代码,有几个问题(坑)需要注意:
1.连接数据库没有指定数据库。
Mongoose连接数据库建议的写法为:
mongoose.connect("mongodb://localhsot:port/databaseName");
即在连接时指定localhost上的数据库,如果没有显式地指定,则默认连接到 MongoDB的 test 数据库,这一点要注意。
2.定义模式或编译模型时没有指定集合。
定义模式的语法是: new Schema( [defination], [options] )
其中defination即文档中属性的定义,options为可指定的选项,包括autoIndex、collection、id、_id、strict等。
一般在定义模式的时候直接指定collection,即需要创建模式的集合名称,如果不指定,可以在编译模型的时候进行指定。
3.编译模型时没有指定集合。
编译模型: model(name, [schema], [colleciton], [skipInit] )
参数: name :标识model的字符串
schema: 即前面定义的Schema对象
collection:要连接的集合名称(如果在Schema对象中没有指定一个集合)
skipInit: 默认为false,如果为true,则跳过初始化过程,创建一个没有连接到数据库的一个简单的Model对象。
* 分析上面的代码,发现在Schema中没有指定集合,而在模型的定义中也没有指定集合,那么新建的文档将要插入到哪里呢?
在MongoDB中,如果向一个不存在的集合中插入文档,则对应的数据库(默认为test)会创建一个集合,二Mongoose同样遵循这个原则,
并且在新创建的数据库的命名上面也颇有讲究,
判断模型名是否可数,如果不可数直接返回模型名作为新集合的名称;如果可数,则返回模型名的复数形式作为新集合的名称(模型名+'s') ;
为了验证上述规则,运行上述的代码,并查看 test 数据库中的集合,如下:
通过查询集合中的文档可以发现,新创建的集合名称为 users 。
尝试修改模型名称为不可数,比如Fish, 再次运行代码,查看新建的集合名称:
可以发现,此时的集合名称是fish, 说明上述的命名规则是正确的。
总结一下:
Mongoose在向集合中插入文档时的集合命名问题相关推荐
- MongoDB查询集合中的文档
MongoDB查询集合中的文档 参考资料:http://blog.csdn.net/qq_36040184/article/details/54355085 测试: 集合中插入数据 > db.c ...
- link中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系
<link>中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系
- mongodb插入文档时不传ObjectId
type BookExt struct {ID bson.ObjectId `bson:"_id"`Title string `bson:"title"`Sub ...
- 2个字段并在一次插入一个字段里面_elasticsearch外用与内观(二)-当插入文档时,elasticsearch都在做什么...
Previous: elasticsearch外用与内观(一)-常用功能与使用方法 在了解了es的基本用法之后,我们再来看看当插入文档数据时,elasticsearch都在做什么. 首先,es的索引只 ...
- excel中插入文档
在创建Excel表格时,有时我们为了让表格包含更多的信息,经常希望能够在相关的表格位置插入一个嵌套文件,那么,怎样在Excel表格中插入其它对象文件呢? 百度经验:jingyan.baidu.com ...
- python统计数据库中每个数的个数,如何统计每个数据库中每个集合中的文档数?...
我的计算机上有许多mongoDB数据库和集合:{"key": [], "business-01": ["reviews", "sy ...
- MongoDB创建集合及创建文档(非常详细哦~)
创建集合类似于设置数据的类型,创建文档(有2种方式)即向创建的集合中插入数据 下面是对创建集合和创建文档的详细介绍,希望可以帮助到有需要的小伙伴 文章目录 创建集合 创建文档1 创建文档2 创建集合 ...
- MongoDB 插入文档
文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 MongoDB 使用 inse ...
- ES 插入文档报错:Rejecting mapping update to [testindex] as the final mapping would have more than 1 type
笔者在用 curl 命令行对 ElasticSearch 进行文档插入时,报了如下错误. [estestuser@vm-10-201-42-9 ~]$ curl -u elastic -H &qu ...
最新文章
- Execution failed for task ':app:mergeDebugResources'.
- BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
- 数据科学之基石:数据科学家必须掌握的10个统计学概念
- python 统计单词个数---不去重
- buuctf N种方法解决
- 循序渐进——NAnt构建实例
- SAP UI5 extension component loads standard component
- PCA(主成分分析)思想及实现
- Linux(16)-Vim编辑器的使用
- Android SDK大连东软镜像地址及地址列表
- CentOS发行版本介绍
- javascript模拟抽奖
- STM32最小系统下载程序方法
- 论文模型图全攻略——模型图就该有模型图的样子!
- python计算球体体积_用于计算python中的体积或表面积的良好算法
- TFS2012 权限设置
- xx省联通SUN M5000清除故障灯MBU_B Degraded
- 为什么要用Handler
- JMokit中的@Mocked与@Injectable区别
- cerebro 通过https访问ES docker集群