Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java异步驱动程序时,并非所有文档都插入MongoDB_Java_Node.js_Mongodb_Asynchronous - Fatal编程技术网

使用Java异步驱动程序时,并非所有文档都插入MongoDB

使用Java异步驱动程序时,并非所有文档都插入MongoDB,java,node.js,mongodb,asynchronous,Java,Node.js,Mongodb,Asynchronous,我在试验mongodb异步驱动程序()时发现了一些奇怪的行为。我在底层代码中重现了这种奇怪的行为: 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.mo

我在试验mongodb异步驱动程序()时发现了一些奇怪的行为。我在底层代码中重现了这种奇怪的行为:

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){
        }
    }
}
结果我得到了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;
var express=require('express');
var MongoClient=require('mongodb')。MongoClient;
var-app=express();
var url='1〕mongodb://localhost:27017/mongotest';
连接(url,函数(err,db){
对于(变量i=0;i<100000;i++){
var name=“name”+i;
数据库集合(“coll”).insertOne({
姓名:姓名
},函数(错误,结果){
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"); 


它插入了100000个文档。

我在3分钟后检查了它,然后在10分钟、30分钟后再次检查。。。这个数字没有变化,所以我认为可以得出这样的结论:它停止了有意义的工作。有趣的是,在第二个示例中,它确实插入了100000个文档。你对这种奇怪的行为有什么解释吗?
 Document doc = new Document("name"+ i.toString(), "TESTING"); 
 Document doc = new Document("_id", "name"+ i.toString());