我可以减少mongodb中的文字吗?

时间:2014-07-27 22:01:35

标签: mongodb

我最后总结了数字example_3,我希望在mongoDb更新(即example_2)中减少每个数字,但是它的文本。有没有办法做到这一点?

posts.update(
        { 'title':doc.title, 'student':username, 'copy':false, 'class_number':{ '$gt': doc.class_number } }, 
        { '$inc': { 'class_number':-1, 'permalink':-1 } }, 
        { multi: true }, 
        function(err, dox){
                if (err) return callback(err, null);
            console.log('decclassnumber');
            console.log(dox + ' posts were decremented.');
            callback(err, dox);         
    });

1 个答案:

答案 0 :(得分:0)

增加/减少字母数字字符串是没有意义的;在要求MongoDB(或您的应用程序代码)调整数字部分之前,您需要将原始字符串值分成有意义的部分。

通常使用permalinks,您也可以递增值而不是递减 - 永久链接的整个意图是确保给定链接始终指向同一资源。

听起来你真的想要实现一个序列模式,在那里你可以找到下一个可用的序列值。

例如,请参阅MongoDB手册中的Create an Auto-Incrementing Sequence

以下是文档中getNextSequence()函数的略微修改版本,该函数使用upsert来查找现有的slug计数器文档或插入新文档。返回值是一个新的独特slu ::

function getNextSequence(name) {
   var ret = db.counters.findAndModify(
      {
        query: { _id: name },
        update: { $inc: { seq: 1 } },
        upsert: true,
        new: true,
      }
   );

    // Return the new slug (eg: "example_1")
    return name + '_' + ret.seq;
}

> getNextSequence("example")
example_1
> getNextSequence("example")
example_2
> getNextSequence("example")
example_3

如果您确实希望从某个起始值递减,则可以为序列插入一个起始值,并使用$inc: { seq: -1 }来减少该起始值。