zoukankan      html  css  js  c++  java
  • MongoDB自动递增序列

    MongoDB没有像SQL数据库外开箱即用自动递增功能。默认情况下,它采用了12字节的ObjectId为_id字段作为主键来唯一地标识文档。然而,可能存在的情况,我们可能希望_id字段有一些其它的自动增加值不是ObjectId。

    由于这不是MongoDB的默认功能,我们将通过编程通过使用计数器集合,由MongoDB文档所建议来实现此功能。

    使用计数器集合

    考虑下面的产品文档。我们希望_id字段从1,2,3,4到n,启动一个自动递增的整数序列。

    {
      "_id":1,
      "product_name": "Apple iPhone",
      "category": "mobiles"
    }

    对于这一点,创建一个计数器集合,将跟踪的最后一个序列值的所有序列字段。

    >db.createCollection("counters")

    现在,我们将插入productid作为键,计数器集合如以下文档:

    {
      "_id":"productid",
      "sequence_value": 0
    }

    字段 sequence_value 跟踪序列的最后一个值。

    使用下面的代码插入到这个序列文档的计数器集合:

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

    创建JavaScript函数

    现在,我们将创建一个函数 getNextSequenceValue 将序列名称作为它的输入,递增序列号1,并返回更新后的序列号。在我们的例子中,序列的名字是 productid.

    >function getNextSequenceValue(sequenceName){
       var sequenceDocument = db.counters.findAndModify(
          {
             query:{_id: sequenceName },
             update: {$inc:{sequence_value:1}},
             new:true
          });
       return sequenceDocument.sequence_value;
    }

    使用JavaScript函数:

    现在,我们将使用 getNextSequenceValue 函数创建一个新文档并指派返回序列值作为文档的_id字段。

    使用下面的代码来插入两个示例文档:

    >db.products.insert({
       "_id":getNextSequenceValue("productid"),
       "product_name":"Apple iPhone",
       "category":"mobiles"})
    
    >db.products.insert({
       "_id":getNextSequenceValue("productid"),
       "product_name":"Samsung S3",
       "category":"mobiles"})

    正如所看到的,我们已经使用 getNextSequenceValue 函数来设置_id字段的值。

    要验证的功能,让我们使用find命令来获取文件:

    >db.prodcuts.find()

    上述查询返回下列文档具有自动递增_id字段:

    { "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}
    
    { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
  • 相关阅读:
    android29
    android28
    android27
    android26
    Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
    Dynamics CRM Import Solution Attribute Display Name description is null or empty
    The service cannot be activated because it does not support ASP.NET compatibility
    IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明
    Unable to access the IIS metabase.You do not have sufficient privilege
    LM算法与非线性最小二乘问题
  • 原文地址:https://www.cnblogs.com/wangjing666/p/6845294.html
Copyright © 2011-2022 走看看