mongodb常见疑问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsoftchenfei/article/details/82969205

本文主要是分享一些关于使用mongodb方面的问题,后续会慢慢补充。如还不了解mongodb,请快速上手《入门手册》。

1. 如何快速熟悉各种命令?

  • mongo –help/ mongod --help
  • db.help()/db.persons.help()
  • 所有命令 db.listCommands()
  • 访问网址http://localhost:28017/_commands(启动服务器添加--rest)

使用runCommand执行,可参考7.5

2. 如何处理文档的引用关系?

MongoDB 中的文档各种关系,官方推荐的思想是整存整取(内嵌文档),但如果内嵌文档在不断增加,数据量不断变大,会影响读写性能。所有引用式关系也是必要的,可通过引用文档的 id 字段来建立关系。

{

   "_id":ObjectId("52ffc33cd85242f436000001"),

   "contact": "987654321",

   "dob": "01-01-1991",

   "name": "Tom Benzamin",

   "address_ids": [

      ObjectId("52ffc4a5d85242602e000000"),

      ObjectId("52ffc4a5d85242602e000001")

   ]

}

var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})

var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

3. 不支持事务,是不是就不可接受?

mongodb不支持事务,但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

4. ObjectId是个什么东东?

ObjectId 是一个12字节 BSON 类型数据,有以下格式:

  • 前4个字节表示时间戳
  • 接下来的3个字节是机器标识码
  • 紧接的两个字节由进程id组成(PID)
  • 最后三个字节是随机数。

MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。

5. 有Int的自动增长类型吗?

MongoDB 没有像 SQL 一样有自动增长的功能,但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。

db.createCollection("counters")

{

  "_id":"productid",

  "sequence_value": 0

}

db.counters.insert({_id:"productid",sequence_value:0})

创建函数

function getNextSequenceValue(sequenceName){

   var sequenceDocument = db.counters.findAndModify(

      {

         query:{_id: sequenceName },

         update: {$inc:{sequence_value:1}},

         new:true

      });

   return sequenceDocument.sequence_value;

}

db.products.insert({

   "_id":getNextSequenceValue("productid"),

   "product_name":"Samsung S3",

   "category":"mobiles"})

猜你喜欢

转载自blog.csdn.net/itsoftchenfei/article/details/82969205