标签: mongo-java

Java MongoDB 一次保存多个文档

我有一个更新的对象/文档列表,我需要立即保存列表中的所有对象。

我在 MongoTemplate 中看到 save() 但它一次只能保存一个文档。有什么方法可以一次保存多个文档,或者我需要调用循环保存?

mongodb mongo-java spring-data-mongodb mongotemplate mongo-java-driver

7
推荐指数
2
解决办法
2万
查看次数

MongoDB列出了java中的可用数据库

我正在编写一个算法,它将通过java中所有可用的Mongo数据库.

在Windows shell上我就是这么做的

show dbs
Run Code Online (Sandbox Code Playgroud)

我怎样才能在java中执行此操作并获取所有可用数据库的列表?

java mongodb mongo-java

6
推荐指数
2
解决办法
5470
查看次数

如何使用Java Driver在MongoDB中执行全文搜索命令?

Mongo和Java大师.我们的团队决定使用最近在MongoDB中引入的全文搜索API.但是,我们发现使用Java MongoDB驱动程序执行命令有些困难.

这是我正在使用的代码:

public BasicDBObject find(String search) {
    BasicDBObject searchCommand = new BasicDBObject();

        searchCommand.put("text", new BasicDBObject().append("search", search));

        CommandResult commandResult = db.command(searchCommand);
}
Run Code Online (Sandbox Code Playgroud)

这是我打印时得到的

 System.out.println(commandResult) 

{ "serverUsed" : "/127.0.0.1:27017" , "errmsg" : "exception: wrong type for field (text) 3 != 2" , "code" : 13111 , "ok" : 0.0 }
Run Code Online (Sandbox Code Playgroud)

java mongodb mongo-java

6
推荐指数
1
解决办法
4416
查看次数

Mongo数据库从Map保存数据

我有下面的代码有效:

if (aDBCursor.hasNext()) {
    DBObject aDbObject = aDBCursor.next();
    aDbObject.put("title", "Test Title");
    ArrayList<DBObject> department = new ArrayList<DBObject>();

    DBObject nested1 = new BasicDBObject();
    nested1.put("name", "Department A");
    nested1.put("id", 1);
    department.add(nested1);

    DBObject nested2 = new BasicDBObject();
    nested2.put("name", "Department B");
    nested2.put("id", 2);
    department.add(nested2);

    aDbObject.put("department", department);
    collection.save(aDbObject);
}
Run Code Online (Sandbox Code Playgroud)

但是我在地图中有A部和B部的数据,如:

Map<Object,Object> map = new HashMap<Object,Object>();
map.put("1", "Department A");
map.put("2", "Department B");
Run Code Online (Sandbox Code Playgroud)

保存这些数据的最佳/最简单方法是什么?有没有办法将地图直接放入mongo DB?或者我是否必须在地图上循环?

进入地图的数据已经从数据库中获取,如下所示:

String[] values = req.getParameterValues("departments");
Map<Object,Object> map = new HashMap<Object,Object>();

DBCollection collection = database.getCollection("Departments");
BasicDBObject query = new BasicDBObject();
query.put("id", new BasicDBObject("$in", values));
DBCursor …
Run Code Online (Sandbox Code Playgroud)

java map mongodb mongo-java

5
推荐指数
1
解决办法
2万
查看次数

来自java的mongodb upsert:如何获取现有对象的_id?

我正在使用带有java和MongoDB的mongo-jackson-wrapper.我通过查询我的一个字段(而不是_id字段)找到一个对象,然后我需要知道_id字段值,无论结果是更新还是插入.但是,我得到一个例外:

com.mongodb.MongoException: No objects to return
    at net.vz.mongodb.jackson.WriteResult.getSavedId(WriteResult.java:97)
Run Code Online (Sandbox Code Playgroud)

异常来自包装器,而不是MongoDB驱动程序本身.

WriteResult<EntityDocument, String> wr 
   = coll.update(DBQuery.is("corefEntityId", corefEntityId), up, true,  false);
Run Code Online (Sandbox Code Playgroud)

什么(如果有的话)是正确的方法吗?

java mongodb mongo-java

5
推荐指数
1
解决办法
1073
查看次数

mongoDB可以比较字段名而不是字段值吗?

当定义要返回的字段时(collection.find(q, fields)),mongoDB是否(如何)支持比较字段名称(而不是值)?

例如,根据字段名称选择一系列字段,而不考虑其值。

假设文档中有以下字段(无论值是什么):

fieldA000 fieldA001 fieldA002 fieldB000 fieldB001 fieldC000 ...
Run Code Online (Sandbox Code Playgroud)

我想限制任何字段名称匹配的返回字段fieldA000 to fieldA999(无需明确定义任何字段名称)或fieldA.*(reg ex)或类似的。

PS:我目前正在评估是否可以使用 mongoDB 而不是 Cassandra,其中列范围/切片选择以非常易于使用的方式提供。

mongodb mongo-java

5
推荐指数
1
解决办法
2160
查看次数

如何查找符合多个条件的文档

我正在尝试使用操作数AND'd一起查询集合.我有shell版本工作:

db.widgets.find({color: 'black, shape: 'round', weight: 100})
Run Code Online (Sandbox Code Playgroud)

我无法找到Java等价物(使用本机驱动程序).我尝试了各种各样的东西,但这是我最近的尝试:

// Find all black, round widgets with weight 100
List<BasicDBObject> criteria = new ArrayList<BasicDBObject>();
criteria.add(new BasicDBObject("color", "black"));
criteria.add(new BasicDBObject("shape", "round"));
criteria.add(new BasicDBObject("weight", 100));

DBCursor cur = widgets.find(new BasicDBObject("$and", criteria));

// Get all matching widgets and put them into a list
List<Widget> widgetList = new ArrayList<Widget>();
DBCursor cur = widgets.find(andQuery);
while (cur.hasNext()) {
  widgetList.add(new Widget(cur.next()));
}

if (widgetList.isEmpty())
  System.out.println("No results found");
Run Code Online (Sandbox Code Playgroud)

有什么想法有什么不对?

java find mongodb mongodb-query mongo-java

5
推荐指数
1
解决办法
7078
查看次数

Spring数据mongodb没有关闭mongodb连接

我正在为我的Web应用程序使用spring-data-mongodb(1.7.0.RELEASE)和spring-webmvc框架.我正在使用mongoRepository使用基本的CRUD函数,但我没有在我的代码中关闭mongo连接因为我认为spring-data-mongodb将自己关闭它,但它继续打开新连接而不是关闭它们.这些太多的连接都会导致我的应用程序崩溃,我必须一次又一次地重启tomcat(每天两次)才能解决这个问题.

注意:Spring Application和mongod在同一台服务器上.这是崩溃后的日志 -

    2015-07-17T01:31:20.068-0400 I NETWORK  [conn3645] end connection 127.0.0.1:55302 (2583 connections now open)
    2015-07-17T01:31:20.071-0400 I NETWORK  [conn1713] end connection 127.0.0.1:48174 (2352 connections now open)
    2015-07-17T01:31:20.072-0400 I NETWORK  [conn2250] end connection 127.0.0.1:51017 (2325 connections now open)
    2015-07-17T01:31:20.072-0400 I NETWORK  [conn2149] end connection 127.0.0.1:50670 (2320 connections now open)
Run Code Online (Sandbox Code Playgroud)

这是重启tomcat后的日志

2015-07-17T01:31:29.994-0400 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:53599 #3984 (1 connection now open)
2015-07-17T01:31:33.263-0400 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:53740 #3985 (2 connections now open)
2015-07-17T01:31:33.580-0400 I NETWORK  [initandlisten] connection …
Run Code Online (Sandbox Code Playgroud)

mongodb mongo-java spring-data-mongodb

5
推荐指数
1
解决办法
1万
查看次数

为什么mongo-java-driver不存在eq?

我在mongodb Java教程中找到了有关如何从mongo集合中查询的信息,但是eq它们对我来说不起作用!您知道如何使用mongo和java过滤集合中的文档吗?

这是我的尝试:

package Database;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class StackOverflow {

    public static void main(String[] args) {

        // insert something to mongo:
        final String URI = "mongodb://localhost:27017";
        final String DB = "StackOverflowQuestion";
        final String COLLECTION = "eqDoesntExcist";

        MongoClientURI connection = new MongoClientURI(URI);
        MongoClient mongo = new MongoClient(connection);
        MongoDatabase database = mongo.getDatabase(DB);
        MongoCollection<Document> collection =  database.getCollection(COLLECTION);

        Document doc = new Document("name", "Troy").append("height", 185);
        collection.insertOne(doc);

        doc = new …
Run Code Online (Sandbox Code Playgroud)

java mongodb-query mongo-java mongo-java-driver

5
推荐指数
1
解决办法
3727
查看次数

Mongo 光标在第一次获取后挂起

我正在使用聚合管道运行查找查询。在迭代从聚合执行返回的光标时,我注意到当 Mongo 发送 getMore 命令时程序挂起。我相信这个命令用于从数据库中获取下一批记录。

最初我使用 100 的批量大小进行测试,它相当快地获取 100 条记录,但是当它尝试获取下一组记录时,游标会挂起。我尝试了同样的方法,批量大小为 2,得到了相同的结果。

我正在使用 Mongo Java 驱动程序版本 3.6 和服务器 3.6.2。我还发现过去 python 驱动程序也出现过类似的问题(https://jira.mongodb.org/browse/PYTHON-276)。

过去有人经历过这种情况吗?任何的意见都将会有帮助。如果需要任何其他详细信息,请告诉我

mongodb mongo-java mongo-java-driver

5
推荐指数
0
解决办法
452
查看次数