我想更新整个数据库中的属性。
示例我想更新属性name
if name=='Gaurav'
然后我想在所有集合中的所有文档中将其替换为name='gsb'
,无论它是否为嵌套对象属性。有没有办法在不知道文件结构的情况下做到这一点,因为每个集合文件都有不同的结构。我想要这个Node JS的查询。
我尝试的内容如下。我被困在中间。
var MongoClient = require('mongodb').MongoClient;
var config = require('../config.js');
var async = require('async');
_ = require ('lodash');
MongoClient.connect('mongodb://' + config.db_url + '/' + config.db_name, function(err, db) {
if(err) throw err;
db.listCollections().toArray(function(err, collInfos) {
async.each(collInfos,function(collectionDetails,cb){
db.collection(collectionDetails.name,function(err, collection){
if(err){
console.log(err)
}
else
{
collection.find().toArray(function(error, result) {
if(error) {
console.log(error);
}
else {
_depthFirstSearch = (collection, input) => {
let type = typeof collection;
if (type === 'string' || type === 'number' || type === 'boolean') {
return _.includes(collection.toString().toLowerCase(), input.toString().toLowerCase());
}
return _.some(collection, (item) => this._depthFirstSearch(item, input));
}
var data= _.filter(result, (item) => {
return _depthFirstSearch(item, "Gaurav");
});
console.log(data)
}
});
}
})
cb();
})
});
});
答案 0 :(得分:0)
经过多次头脑风暴后,我找到了解决方案。我写了下面的函数来实现这个目的。
var replaceAllInsatnceInDB=function(db_url/*localhost:27017*/,db_name,propName,stringToSearch,stringToReplace){
MongoClient.connect('mongodb://' + db_url + '/' + db_name, function(err, db) {
if(err) throw err;
db.listCollections().toArray(function(err, collInfos) {
async.each(collInfos,function(collectionDetails,cb){
db.collection(collectionDetails.name,function(err, collection){
if(err){
console.log(err)
}
else
{
collection.find().toArray(function(error, result) {
if(error) {
console.log(error);
}
else {
result.forEach(function(document){
var op=function(record){
if(record!== null && record!==undefined ){
var props=Object.keys(record);
var forObject=function(obj){
if(Array.isArray(obj)){
var forArray=function(arr){
for(var j=0;j<arr.length;j++){
if(typeof arr[j] ==="string"){
if(arr[j]===stringToSearch && props[i]==propName){
arr[j]=stringToReplace
}
}
if(typeof arr[j] ==="object"){
forObject(arr[j]);
}
}
return(arr)
}
obj=forArray(obj)
}else{
op(obj);
}
return(obj);
}
for(var i=0;i<props.length;i++){
if(typeof record[props[i]] ==="string"){
if(record[props[i]]===stringToSearch && props[i]==propName){
record[props[i]]=stringToReplace
console.log()
}
}
if(typeof record[props[i]] ==="object"){
record[props[i]]=forObject(record[props[i]])
}
}
}
return(record);
}
document=op(document);
collection.update({_id : document._id},document,function(error,doc){
if(error){
console.log(error)
}else{
console.log("template updated");
}
})
})
}
});
}
})
cb();
})
});
});
}