使用async-driver for Java时,并非所有文档都插入到MongoDB中
发布时间:2020-12-15 02:13:13 所属栏目:Java 来源:网络整理
导读:我正在尝试使用 mongodb-async驱动程序( http://mongodb.github.io/mongo-java-driver/3.0/driver-async/)并注意到奇怪的行为.我在底层代码中重现了奇怪的行为: import com.mongodb.async.SingleResultCallback;import com.mongodb.async.client.MongoClien
我正在尝试使用
mongodb-async驱动程序(
http://mongodb.github.io/mongo-java-driver/3.0/driver-async/)并注意到奇怪的行为.我在底层代码中重现了奇怪的行为:
import com.mongodb.async.SingleResultCallback; import com.mongodb.async.client.MongoClient; import com.mongodb.async.client.MongoClients; import com.mongodb.async.client.MongoCollection; import com.mongodb.async.client.MongoDatabase; import org.bson.Document; public class main { public static void main(String [] args) { MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("mongotest"); MongoCollection<Document> collection = database.getCollection("coll"); for(Integer i = 0; i < 100000; i++) { Document doc = new Document("name"+ i.toString(),"TESTING"); collection.insertOne(doc,new SingleResultCallback<Void>() { public void onResult(final Void result,final Throwable t) { System.out.println("Inserted!"); } }); } while(true){ } } } 我希望这段代码能够将100000个文档插入名为“mongotest”的mongo-database的集合’coll’中. 在mongodb-shell中运行此语句时 db.getCollection("coll").count() 结果我得到了93062.这个数字因每次运行而异,但永远不会达到100.000.任何人都可以解释为什么当我使用这段代码时,所有对象都没有正确存储在MongoDB中作为文档?我们在3台不同的机器上进行了测试,每台机器都暴露了相同的行为 我觉得这是一个与驱动程序相关的问题,因为跟进这个问题我使用node.js写了一个类似的实验: var express = require('express'); var MongoClient = require('mongodb').MongoClient; var app = express(); var url = 'mongodb://localhost:27017/mongotest'; MongoClient.connect(url,function (err,db) { for (var i = 0; i < 100000; i++) { var name = "name" + i; db.collection("coll").insertOne({ name: name },function(err,results) { if(err==null) { console.log("Sweet"); } }); } }); module.exports = app; 与java代码相比,此代码运行时间更长,但是当代码完成时,100.000文档按预期位于集合中. 任何人都可以解释为什么这不是java示例的情况,并可能提供解决方案? 解决方法
你什么时候运行db.getCollection(“coll”).count()来检查插入结果?
检查结果时,插入过程可能还没有完成. 2016-02-19 15:00编辑 我做了同样的测试,结果相同. 但是当我改变以下行时 Document doc = new Document("name"+ i.toString(),"TESTING"); 至 Document doc = new Document("_id","name"+ i.toString()); 它恰好插入了100000个装饰品. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读