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

我可以减少mongodb中的文本吗?,mongodb,Mongodb,我有一个结尾带有数字的永久链接,如示例3,我想在mongoDb更新中减少每个链接,即示例2,但它是文本。有办法做到这一点吗 posts.update( { 'title':doc.title, 'student':username, 'copy':false, 'class_number':{ '$gt': doc.class_number } }, { '$inc': { 'class_number':-1, 'permalink':-1 } },

我有一个结尾带有数字的永久链接,如示例3,我想在mongoDb更新中减少每个链接,即示例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);         
    });

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

通常情况下,您也会增加值,而不是减少值-永久链接的全部目的是确保给定链接始终指向同一资源

听起来您实际上想要实现一个序列模式,在这里您可以找到下一个可用的序列值来使用

例如,请参见MongoDB手册中的

这里是文档中getNextSequence函数的一个稍加修改的版本,它使用upsert查找现有的slug counter文档或插入新的slug counter文档。返回值是一个新的唯一段塞:

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}将其递减。

因为MongoDB无法知道要递减什么,我会说不,您必须自己这样做,您可以使用$set,但不是$inc.@GergoErdosi对,我尝试了$set,但每个值都不同,所以我需要找到每个permalink,然后弹出它,减去1,然后设置它。但是我如何在更新期间找到每个值呢?请添加示例数据和预期输出。此外,如果这些数字应该增加/减少,那么最好单独存储它们并在应用程序中构造永久链接。这样,您就可以轻松地使用$inc了。您不能,MongoDB for one还不支持所讨论文档的投影,即使这样,您也需要一些代码来实际更新它