我可以减少mongodb中的文本吗?
我有一个结尾带有数字的永久链接,如示例3,我想在mongoDb更新中减少每个链接,即示例2,但它是文本。有办法做到这一点吗我可以减少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 } },
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还不支持所讨论文档的投影,即使这样,您也需要一些代码来实际更新它