原文链接: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在向集合中插入文档时的集合命名问题相关推荐

  1. MongoDB查询集合中的文档

    MongoDB查询集合中的文档 参考资料:http://blog.csdn.net/qq_36040184/article/details/54355085 测试: 集合中插入数据 > db.c ...

  2. link中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系

    <link>中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系

  3. mongodb插入文档时不传ObjectId

    type BookExt struct {ID bson.ObjectId `bson:"_id"`Title string `bson:"title"`Sub ...

  4. 2个字段并在一次插入一个字段里面_elasticsearch外用与内观(二)-当插入文档时,elasticsearch都在做什么...

    Previous: elasticsearch外用与内观(一)-常用功能与使用方法 在了解了es的基本用法之后,我们再来看看当插入文档数据时,elasticsearch都在做什么. 首先,es的索引只 ...

  5. excel中插入文档

    在创建Excel表格时,有时我们为了让表格包含更多的信息,经常希望能够在相关的表格位置插入一个嵌套文件,那么,怎样在Excel表格中插入其它对象文件呢? 百度经验:jingyan.baidu.com ...

  6. python统计数据库中每个数的个数,如何统计每个数据库中每个集合中的文档数?...

    我的计算机上有许多mongoDB数据库和集合:{"key": [], "business-01": ["reviews", "sy ...

  7. MongoDB创建集合及创建文档(非常详细哦~)

    创建集合类似于设置数据的类型,创建文档(有2种方式)即向创建的集合中插入数据 下面是对创建集合和创建文档的详细介绍,希望可以帮助到有需要的小伙伴 文章目录 创建集合 创建文档1 创建文档2 创建集合 ...

  8. MongoDB 插入文档

    文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 MongoDB 使用 inse ...

  9. 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 ...

最新文章

  1. Execution failed for task ':app:mergeDebugResources'.
  2. BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
  3. 数据科学之基石:数据科学家必须掌握的10个统计学概念
  4. python 统计单词个数---不去重
  5. buuctf N种方法解决
  6. 循序渐进——NAnt构建实例
  7. SAP UI5 extension component loads standard component
  8. PCA(主成分分析)思想及实现
  9. Linux(16)-Vim编辑器的使用
  10. Android SDK大连东软镜像地址及地址列表
  11. CentOS发行版本介绍
  12. javascript模拟抽奖
  13. STM32最小系统下载程序方法
  14. 论文模型图全攻略——模型图就该有模型图的样子!
  15. python计算球体体积_用于计算python中的体积或表面积的良好算法
  16. TFS2012 权限设置
  17. xx省联通SUN M5000清除故障灯MBU_B Degraded
  18. 为什么要用Handler
  19. JMokit中的@Mocked与@Injectable区别
  20. cerebro 通过https访问ES docker集群

热门文章

  1. 2022-2028全球水下激光扫描仪行业调研及趋势分析报告
  2. 高频小信号谐振放大器【Multisim】【高频电子线路】
  3. 使用公网NAT网关SNAT功能访问互联网
  4. 我的华硕A3E笔记本 cpu-z 抓图
  5. 翻译论文:Deep Domain Confusion: Maximizing for Domain Invariance
  6. electron打包错误
  7. 国外顶级软件开发工具和平台汇总
  8. 微信小程序 授权地理位置被拒绝后 wx.getLocation接口调用失败问题
  9. vue3 pinia 状态管理(清晰明了)
  10. 端口光电口转换和光功率查看命令 (思科 锐捷 华为 华三)