请参阅post 如何使用Java将数组添加到MongoDB文档?
我已经使用java创建了一个mongo架构,它有子元素,我得到_id的主文档我想_id在子元素中也在这里输出看起来(我已经标记了我需要的部分_id) b.party.find().pretty();
{
"_id" : ObjectId("5399aba6e4b0ae375bfdca88"),
"addressDetails" : [
{
// _id here
"locationName" : "Office",
"phones" : [
{ // _id here
"name" : "Tel1",
"value" : "95253-"
},
{ // _id here
"name" : "Tel2",
"value" : "95253-"
},
{ // _id here
"name" : "Tel3",
"value" : "95253-"
},
{ // _id here
"name" : "Fax1",
"value" : "0253-"
}
],
"address" : "A-3,MIDCA-3,MIDC",
"defaultBillAddrerss" : "",
"pincode" : …Run Code Online (Sandbox Code Playgroud) 在mongodb java驱动程序3.5版本中,添加了POJO映射的 "官方支持" .
但它似乎没有提到将类映射到特定集合或将类的pojo字段存储在单独的集合中而不是嵌入它的任何内容.
鉴于:
public class Address {
public ObjectId id;
public String zipcode;
}
//elsewhere
public class Person {
public ObjectId id;
public Address address;
}
Run Code Online (Sandbox Code Playgroud)
你如何让这个插入一个Person实例实际上插入类似{id={some oid}, address={oid1}}的people集合,并{id={oid1}, zip={some zipcode}}在addresses收集
这会在以后的版本中出现还是我错过了一些注释或配置步骤?
获取通过Java插入的文档的Mongo生成ID的最佳方法是什么.
插入文档的Java进程是多线程的,这意味着我们需要一些原子方式来插入和返回对象的ID.
另外,如果我们设置一个唯一索引,如果该对象是重复的,是否会返回一个ID?
谢谢!
我正在使用mongodb来存储用户的信息.我想创建一个从db获取信息的方法,创建Player对象并将它们插入到一个Players数组中.
这是以下方法
public ArrayList<Player> getArrayOfPlayers(){
ArrayList<Player> savePlayers = new ArrayList<Player>();
DB db = connectToMongo();
DBCollection coll = db.getCollection("players");
DBCursor cursor = coll.find();
while(cursor.hasNext()) {
String tempName = (String)cursor.next().get("name");
String tempSession = (String)cursor.next().get("session");
String tempStringScore = (String)cursor.next().get("score");
int tempScore = Integer.parseInt(tempStringScore);
Player player = new Player(tempName,tempSession,tempScore);
savePlayers.add(player);
}
return savePlayers;
}
Run Code Online (Sandbox Code Playgroud)
我有4个用户存储在数据库中,当我试图首先调用该方法,然后打印名称,例如我得到一个例外.我在方法之外使用了try-catch,但是我抓住了异常,但之后它只打印了第一个用户的名字.它似乎在第二次迭代中抛出异常.
这是除了我收到的例外的消息.
java.lang.RuntimeException: no more
com.mongodb.DBApiLayer$Result.next(DBApiLayer.java:394)
com.mongodb.DBApiLayer$Result.next(DBApiLayer.java:360)
com.mongodb.DBCursor._next(DBCursor.java:445)
com.mongodb.DBCursor.next(DBCursor.java:525)
machine.DAOMongodb.getArrayOfPlayers(DAOMongodb.java:74)
machine.testDB.doGet(testDB.java:43)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud) 直截了当的问题,是否有人知道如何使用链接到mongoDB数据库的morphia进行通配符查询?
这就是mongo语句的样子:
Mongo:db.users.find({name:/Joe/})
SQL: SELECT * FROM users WHERE name LIKE "%Joe%"
我的morphia语句如下:
吗啡: ds.find(File.class, "filename","/test/").order("filename").asList();
我的数据库中有文件名,例如test1,test等
如果有人可以告诉我,如果甚至可以使用吗啡,那将是非常感激的.
谢谢
(MongoDB全文搜索)
您好,我已经在索引中添加了一些字段,这就是我搜索search_keyword的方法.
BasicDBObject search = new BasicDBObject("$search", "search_keyword");
BasicDBObject textSearch = new BasicDBObject("$text", search);
DBCursor cursor = users.find(textSearch);
Run Code Online (Sandbox Code Playgroud)
我不希望 在索引中指定的所有字段中搜索search_keyword.*是否有任何方法可以指定要在索引的特定字段中搜索的search_keyword?*
如果是这样,请告诉我如何用Java做到这一点.
谢谢.
JSON.parse() 来自mongo(Java驱动程序)返回BasicDBList或BasicDBObject.
但是,迁移到蒙戈司机3.x的时候,那是什么返回无论是新的解析方法Document还是List<Document>?
在新驱动程序中,Document.parse()只解析一个对象,而不是一个数组(在给定数组时抛出异常).
对于具有3.x Java驱动程序的数组,JSON.parse()的等价物是什么?
我们有一个简单的应用程序,其中所有用户都在同一时区,因此我们对在 mongo 日期对象中存储时区信息不感兴趣。
这种极端步骤的原因是我们有多个微服务使用由不同开发人员管理的公共数据库。他们每个人都需要在查询中明确设置与时区相关的内容,并在无效数据集中忘记相同的结果。
由于目前 MongoDB 人Mongo 数据类型
不支持存储没有时区的日期。
只是想知道这是他们在 mongo 中表示没有时区的日期的任何替代方法,通过它我们仍然可以利用 mongo 数据库查询基于日期的语法,如日期范围、日期等。
同时,方便DBA 阅读和管理记录。
我正在尝试为以下方法编写 JUnit 测试用例,我正在使用 Mockito 框架。
方法:
public EmplInfo getMetaData(String objectId) {
objectId = new StringBuffer(objectId).reverse().toString();
try{
BasicDBObject whereClauseCondition = getMetaDataWhereClause(objectId);
EmplInfo emplinfo= new EmplInfo ();
emplinfo.set_id(objectId);
FindIterable<Document> cursorPersonDoc = personDocCollection.find(whereClauseCondition);
for (Document doc : cursorPersonDoc) {
emplinfo.setEmplFirstName(doc.getString("firstname"));
emplinfo.setEmplLastName(doc.getString("lastname"));
break;
}
return emplinfo;
}catch(Exception e){
e.printstacktrace();
}
Run Code Online (Sandbox Code Playgroud)
朱尼特:
@Test
public void testGetMetaData() throws Exception {
String docObjectId = "f2da8044b29f2e0a35c0a2b5";
BasicDBObject dbObj = personDocumentRepo.getMetaDataWhereClause(docObjectId);
FindIterable<Document> findIterable = null;
Mockito.when(collection.find(dbObj)).thenReturn(findIterable);
personDocumentRepo.getMetaData(docObjectId);
}
Run Code Online (Sandbox Code Playgroud)
在“personDocumentRepo.getMetaData(docObjectId)”中得到空点期望,因为我“返回”了空的findIterable。不确定如何将虚拟/测试值分配给 findIterable。
请指教。
谢谢!婆罗提
你好,我有这份文件
{
email: "email@gmail.com",
list: [
{
"product": "Car",
"price": 18
},
{
"product": "Boat",
"price": 20
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用参数识别文档,并通过查找具有“Car”参数的产品并使用 MongoDB Java 驱动程序将价格email更新为 15 来更新参数中的特定对象。list
谢谢