我最后总结了数字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);
});
答案 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 }
来减少该起始值。