如何使用现有属性为每个MongoDB文档添加新属性(列)?

时间:2017-03-04 17:55:09

标签: mongodb database-design mongodb-query database

我想存储两个版本的属性'filename'(一个是常规文件名,一个是文件名的小写版本)。我需要存储这两个属性,以便我可以对返回的数据进行不区分大小写的排序。以下是我到目前为止的情况:

db.collection.update({},{ lowerCaseFileName: filename.toLowerCase() })

这将返回错误“文件名未定义”。我一直在寻找完成的方法,但是,没有找到任何有助于解决我的问题。我感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

自MongoDB 3.4以来有Case Insensitive Indexes功能:

db.collection.createIndex({
    filename: 1
}, {
    collation: {
        locale: 'en',
        strength: 2
    }
})

您必须定义localestrength值1或2(请参阅collation)以了解不区分大小写

然后,您可以使用:

执行不敏感的排序
db.collection.find().collation({
    locale: 'en',
    strength: 2
}).sort({
    filename: -1
})

答案 1 :(得分:0)

var cursor = db.collection.find({});
cursor.forEach(function(e){
     e.lowercase = e.fileName.toLowerCase();
     db.collection.save(e);
    })

尝试迭代集合并更新字段