mongodb服务器下中的数据库解锁。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb服务器下中的数据库解锁。相关的知识,希望对你有一定的参考价值。

mongo服务器下,只有其中一个lbs库,大小不到2G,里面有十几张表,但是查询非常缓慢,检测发现一直有很多的锁,进程也有好多,出现锁等待的情况。请问有什么办法解决吗?使用db.fsyncUnlock(); 解锁也不行,解不掉。db.killOp()杀掉最高的进程,查看进程时,刷出屏了,看不到上面进程的信息。求高手给点建议

参考技术A 解锁
use admin
db.$cmd.sys.unlock.findOne()
说明:
执行解锁,结果如下所示:
db.currentOp()本回答被提问者采纳

更新 MongoDB 节点 Js 中的整个集合

【中文标题】更新 MongoDB 节点 Js 中的整个集合【英文标题】:Update Entire Collection In MongoDB Node Js 【发布时间】:2020-02-15 08:02:13 【问题描述】:

我有一个程序在特定时间后从 FTP 服务器接收 New 文件,我将新更新文件的数据插入我的数据库 MongoDB 字段保持不变,只有新文件中的数据发生变化。现在的问题是每次我都必须将整个新集合插入数据库,并且集合相应增加。例如-第一次数据有 20 条记录,第二次是 40 条,然后是 60 条,依此类推。我想做的是在插入新 文件 之前检查 新文件 中哪个字段的数据已更新strong> 数据,并且应该只更新数据库中这些字段的数据,而不是插入整个新文档。 MONGOOSE 或 MONGODB 是否为此提供解决方案,意味着 如果我将数据作为参数传递,它应该将我现有的集合与我的新集合进行比较数据,然后仅更新已更新字段 ..请帮帮我,我卡住了,谢谢:)。我正在使用 NODE JS ...

var c = new Client();
            var connectionProperties = 
                host: 'ABC',
                user: 'ABC',
                port: 'ABC',
                password: 'ABC',
            ;
            c.connect(connectionProperties);
          c.on('ready', function () 
                c.get('path-to-excel-file', function (err, stream) 
                    if (err) throw err;
                    stream.once('close', function () 
                        const workBook = XLSX.readFile('Convertedfile.xlsx');
                        XLSX.writeFile(workBook, 'Convertedfile',  bookType: "csv" );
                        csv()
                            .fromFile("Convertedfile")
                            .then((jsonObj) => 
                                Model.collection.insert(jsonObj, function (err, docs) 
                                    if (err) 
                                        return console.error(err);
                                     else 
                                        console.log("All Documents insterted");
                                    
                                );
                            )
                        c.end()
                    );
                    stream.pipe(fs.createWriteStream('ConvertedFile.xlsx'))
                )
          )

【问题讨论】:

【参考方案1】:

看起来你需要 upsert 意味着如果文档/记录存在则更新或插入/创建它。

因此,这可以一次完成 1 个文档或批量完成,但需要先进行查询才能找到匹配的文档。

由于您没有提供任何示例数据,因此我无法为您编写示例代码 sn-p,但这里是帮助您入门的链接,批量:Bulk.find.upsert 和单个文档,此线程很好:how-do-i-update-upsert-a-document-in-mongoose

更新:这里是 mongodb 批量更新插入:

const mongo = require('mongodb');
const MongoClient = mongo.MongoClient;

const client = new MongoClient('mongodb://127.0.0.1:27017',  useUnifiedTopology: true );
client.connect(async err => 
    if (err) 
        console.log('DB Connection Error ', err);
     else 
        const db = client.db('node-cheat-db');

        // lets assume you've read all file contents and data is now ready for db operation
        let records = [
            first: 'john', last: 'doe', email: 'johen@doe.com',
            first: 'jack', last: 'doe', email: 'jack@doe.com',
            first: 'jill', last: 'doe_updated', email: 'jill@doe.com'
        ];

        // prepare bulk upsert so that new records are created and existing are updated
        let bulk = db.collection('users').initializeOrderedBulkOp();
        for (var i = 0; i < records.length; i++) 
            bulk.find(
        "email": records[i].email // at least 1 key should be treated as PK; in this example email is PK
        ).upsert(records[i]).replaceOne(records[i]);
        
        bulk.execute(function (err,updateResult) 
                if (updateResult.result.ok != 1) 
                    console.log('Bulk Upsert Error');
                 else 
                    console.log(`Inserted: $updateResult.result.nUpserted and Updated: $updateResult.result.nModified`);
                
        );
    
);

示例输出如下所示:

插入:0 并更新:3

更多详情:

克隆节点作弊bulk-update,运行node bulk-update.js,然后运行npm install mongodb

【讨论】:

感谢您的链接,它确实帮助我从某个地方开始.. 我已经用我的代码更新了问题,所以你能指导我如何在我的代码中实现这一点.. 稍微解释一下我在做 !首先,我从 FTP 服务器接收 EXCEL 文件,将其转换为 CSV,然后将 CSV 数据添加到数据库中 好吧@rizwanraza,我已经添加了代码,它显示了如何处理批量 upsert。希望现在有帮助!

以上是关于mongodb服务器下中的数据库解锁。的主要内容,如果未能解决你的问题,请参考以下文章

mongodb系统知识(11)

TIOBE11月份编程语言排行榜:C非常接近Java,分析下中美的就业情况

如何断开 Glassfish 上的所有 JDBC 连接并解锁 H2 数据库?

李迅雷+老龄化下中青年人消费心态的变化的角度来看未来十倍股

我们如何确保 mongoDb 中的数据完整性?

更新 MongoDB 节点 Js 中的整个集合