mongodb给每条记录增加一个编号

比如有下面一个集合articles:

{"_id" : ObjectId("98r498jfgragaja9ra4"),"titile":"foo","content":"foo..."}
{"_id" : ObjectId("498aut89auhgua4940q"),"titile":"bar","content":"bar..."}
{"_id" : ObjectId("30ua9ah984yhtauiga9"),"titile":"hello","content":"hello..."}

我想给它增加一个从1开始的id字段,结果像这样:

{"_id" : ObjectId("98r498jfgragaja9ra4"),"titile":"foo","content":"foo...","id":"1"}
{"_id" : ObjectId("498aut89auhgua4940q"),"titile":"bar","content":"bar...","id":"2"}
{"_id" : ObjectId("30ua9ah984yhtauiga9"),"titile":"hello","content":"hello...","id":"3"}

应该怎么做呢?

阅读 7.3k
5 个回答

你可能要先考虑一下为什么需要这个编号。如果只是需要递增字段,_id使用的ObjectId就是递增的。而使用数字序列为什么有问题,我在这个问题里面做过解释。

我也是mongodb新手 不太知道有什么高级的方法 反正就暴力循环再添加一个id字段呗 用的mongojs

{ "_id" : ObjectId("57aa0072a6b10b43d426d681"), "name" : "Yang", "email" : "yang@fan.com", "number" : "433" }

var mongojs = require('mongojs');
var db = mongojs('contactList',['contactList']);
db.contactList.find(function(err,docs){
    var i = 1;
    docs.forEach(function(element) {
            db.contactList.findAndModify(
            {query:{_id:mongojs.ObjectId(element._id)},
            update: {$set:{name:element.name,email:element.email,number:element.number,id:i}},
            new :true},function(err,doc){
            });
            i++;
        });
}, this);

MongoDb的objectId设计就基本可以满足需求,建议重新考虑需求,如果特别有必要需要自己做分布式id生成服务或者用redis lua脚本实现id自增

https://www.jianshu.com/p/ddc... 特意注册了一个账号回答你,利用group再搭配unwind的includeArrayIndex属性就可以实现,上面的人都说了一堆废话,问非所答,我已经实现了.

推荐问题
宣传栏