我的数据库中有大量的文档,我想知道如何浏览所有文档并更新它们,每个文档具有不同的值。
答案取决于您使用的驱动程序。我所知道的所有MongoDB驱动程序都以cursor.forEach()
一种或另一种方式实现。
这里有些例子:
collection.find(query).forEach(function(doc) {
// handle
}, function(err) {
// done or error
});
db.collection.find(query).forEach(function(err, doc) {
// handle
});
collection.find(query, { stream: true })
.each(function(doc){
// handle doc
})
.error(function(err){
// handle error
})
.success(function(){
// final callback
});
collection.find(query).stream()
.on('data', function(doc){
// handle doc
})
.on('error', function(err){
// handle error
})
.on('end', function(){
// final callback
});
.forEach
回调内部更新文档在.forEach
回调内部更新文档的唯一问题是您不知道何时更新所有文档。
要解决此问题,您应该使用一些异步控制流解决方案。以下是一些选项:
这是一个使用async
,使用其queue
功能的示例:
var q = async.queue(function (doc, callback) {
// code for your update
collection.update({
_id: doc._id
}, {
$set: {hi: 'there'}
}, {
w: 1
}, callback);
}, Infinity);
var cursor = collection.find(query);
cursor.each(function(err, doc) {
if (err) throw err;
if (doc) q.push(doc); // dispatching doc to async.queue
});
q.drain = function() {
if (cursor.isClosed()) {
console.log('all items have been processed');
db.close();
}
}
问题内容: 我一直在尝试发现如何将MongoDB与Node.js一起使用,并且在文档中似乎建议的方法是使用回调。现在,我知道这只是一个优先事项,但我真的更喜欢使用诺言。 问题是我没有找到如何在MongoDB中使用它们。确实,我已经尝试了以下方法: 结果是。在那种情况下,看来这不是这样做的方法。 有什么方法可以在Node内部使用带有promise而不是回调的mongo db吗? 问题答案: 您的方法
我正在处理一个节点。js服务器,连接到MongoDB,用TypeScript编写。当我尝试使用MongoDB时,它不会创建连接,但是当我检查mongo输出时,它似乎确实创建了连接。 在节点中定义连接的代码中缺少了什么。js? 我的连接字符串是 我的连接方式: Mongo输出: 2018-11-08T23:06:24.106 0100网络[监听器]连接从127.0.0.1:51345#11接受(2个
问题内容: 我将MongoDB与本机节点驱动程序一起使用,需要准确存储可能大于int最大值2147483647的数字。在跟踪使用情况时,我将需要能够增加数字。我有什么选择? 我正在用猫鼬。我遇到的问题是,当我过去2147483647时,它会将数字转换为双精度。如何强制Mongoose使用64位long int ? 我的架构如下所示 我的样子是这样 问题答案: 您现在可以使用该插件在Mongoose
问题内容: 好的,所以我已经安装了Flask,我想知道如何将MongoDB数据库与即将开始构建的Flask应用程序连接和使用。 问题答案: 我个人发现PyMongo库简单易用。 你首先需要导入并创建一个连接: 然后获取你的数据库实例和集合(表): 然后,你可以通过处理保存数据的JSON文档来操纵数据。他们的网站上有完整的示例。
问题内容: 我遍历了许多博客和网站,了解如何配置Elasticsearch for MongoDB来索引MongoDB中的集合,但是它们都不是直接的。 请向我说明逐步安装Elasticsearch的过程,其中应包括: 组态 在浏览器中运行 我将Node.js与express.js结合使用,因此请相应地提供帮助。 问题答案: 这个答案应该足以使您开始按照本教程使用MongoDB,Elasticsea
在NodeJS项目中使用Bazel最简单的方法是什么,有些项目可能是用其他语言编写的?另外,是否有一个例子在某处Bazel被用于多回购设置? 谢了!