如何使用现有属性为每个MongoDB文档添加新属性(列)?
问题描述:
我想存储属性'filename'的两个版本(一个是常规文件名,一个是文件名的小写版本)。我需要存储这两个属性,以便对返回的数据进行不区分大小写的排序。这是我到目前为止:如何使用现有属性为每个MongoDB文档添加新属性(列)?
db.collection.update({},{ lowerCaseFileName: filename.toLowerCase() })
这是返回错误“文件名未定义”。我一直在寻找办法来完成,但是,没有找到任何有助于解决我的问题的东西。我很感激我能得到的任何帮助,谢谢。
答
有因为MongoDB的3.4 Case Insensitive Indexes特征:
db.collection.createIndex({
filename: 1
}, {
collation: {
locale: 'en',
strength: 2
}
})
必须定义一个locale
和不区分大小写一个strength
值的1或2(参见collation
)
然后,可以执行不敏感的排序搭配:
db.collection.find().collation({
locale: 'en',
strength: 2
}).sort({
filename: -1
})
答
var cursor = db.collection.find({});
cursor.forEach(function(e){
e.lowercase = e.fileName.toLowerCase();
db.collection.save(e);
})
尝试迭代收集并更新字段
非常感谢! – remank