簡體   English   中英

關於從MongoDB中刪除的com.mongodb.MongoTimeoutException

[英]com.mongodb.MongoTimeoutException on deleting from MongoDB

我已經在https://mlab.com/上創建了一個MongoDB數據庫,現在我試圖通過我的Android應用程序從該數據庫中刪除一個文檔,但是我收到了一個異常com.mongodb.MongoTimeoutException 所以請幫忙。

package com.example.abc.mongodatabase;

import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import java.net.URL;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MongoDeletion().execute(MainActivity.this);
    }
}



class MongoDeletion extends AsyncTask<Context, Void, Object> {

    @Override
    protected Object doInBackground(Context... params) {
        try {
            URL requestUrl = new URL("https://api.mongolab.com/api/1/databases/my_database/collections/my_table/?apiKey=################################");
            MongoClient mongoClient = new MongoClient(new ServerAddress(requestUrl.getHost(),requestUrl.getPort()));
            DB db = mongoClient.getDB("my_database");
            DBCollection table = db.getCollection("my_table");
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.put("name", "my_name");
            table.remove(searchQuery);
            Toast.makeText(params[0], "Deleted...", Toast.LENGTH_SHORT).show();
        }
        catch (Exception e) {
            Log.e("ERROR","MongoDB", e);
        }
        return null;
    }
}

我要刪除的文件

{
    "_id": {
        "$oid": "5735d2e50a00b27acd69e10b"
    },
    "date": "14/5/2016",
    "longitude": "72.98868477344513",
    "name": "my_name",
    "latitude": "33.639541155896275"
}

例外

05-15 11:20:02.122 2651-2680/com.example.mongodatabase.mongo2 E/ERROR: MongoDB
com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of cluster state is {type=Unknown, servers=[{address=api.mongolab.com:-1, type=Unknown, state=Connecting, exception={java.lang.IllegalArgumentException: port=-1}}]
at com.mongodb.BaseCluster.getServer(BaseCluster.java:82)
at com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:656)
at com.mongodb.DBTCPConnector.access$500(DBTCPConnector.java:40)
at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:505)
at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:448)
at com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:407)
at com.mongodb.DBCollectionImpl.remove(DBCollectionImpl.java:219)
at com.mongodb.DBCollectionImpl.remove(DBCollectionImpl.java:203)
at com.mongodb.DBCollection.remove(DBCollection.java:300)
at com.mongodb.DBCollection.remove(DBCollection.java:327)
at com.example.mongodatabase.mongo2.MongoDeletion.doInBackground(MainActivity.java:43)
at com.example.mongodatabase.mongo2.MongoDeletion.doInBackground(MainActivity.java:32)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)

錯誤消息告訴您錯誤:

com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of cluster state is {type=Unknown, servers=[{address=api.mongolab.com:-1, type=Unknown, state=Connecting, exception={java.lang.IllegalArgumentException: port=-1}}]

它告訴你有一個非法的端口參數: java.lang.IllegalArgumentException:port = -1

MongoClient構造函數中,您使用requestUrl.getPort()作為port參數,但URL文檔清楚地說明了getPort()

返回此URL的端口號,如果此URL沒有顯式端口,則返回-1

您的requestUrl字符串沒有端口值,因此getPort()返回-1。 MongoDB實例不接受-1作為端口號,因此最終超時並為您提供您所看到的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM