gpt4 book ai didi

javascript - 如何更新 MongoDB 中整个数据库的特定属性?

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:54 25 4
gpt4 key购买 nike

我想更新整个数据库中的属性。示例我想更新属性 name 如果 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();
})
});
});

最佳答案

经过多次头脑 Storm ,我找到了解决方案。我编写了下面的函数来实现此目的。

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();
})
});
});
}

关于javascript - 如何更新 MongoDB 中整个数据库的特定属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43137421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com