我有一个BasicDBObject调试时似乎持有:
{ "_id" : { "p_key" : { "$date" : "2012-02-02T00:00:00Z"} , "d_key" : 222} , "t_key" : 10195 , "w_key" : 4 , "f_key" : { "$date" : "2012-02-02T00:00:00Z"}}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试:
dbObject.get("_id.d_key"));
Run Code Online (Sandbox Code Playgroud)
我得到一个空指针异常.
对我在这里做错了什么的想法?
我试图获得d_key内部的价值_id.
我想知道Java驱动程序相当于Mongo JavaScript shell的Object.bsonsize(doc)方法是什么?例如,执行以下操作的Java代码是什么:
bobk-mbp:~ bobk$ mongo
MongoDB shell version: 2.0.4
connecting to: test
PRIMARY> use devices;
switched to db devices
PRIMARY> Object.bsonsize( db.profiles.findOne( { _id: "REK_0001" } ) );
186
PRIMARY> Object.bsonsize( db.profiles.findOne( { _id: "REK_0002" } ) );
218
PRIMARY>
Run Code Online (Sandbox Code Playgroud)
如何使用MongoDB Java驱动程序执行相同的基本用例.通过JavaDocs并不明显.
我是mongodb的新手.我需要知道如何从集合中的文档中单独检索一个paricular字段.
例如:
db.things.findOne({name:"mongo"});
Run Code Online (Sandbox Code Playgroud)
结果:
{"_id" : "497dab624ee47b3a675d2d9c" , "name" : "mongo" , "type" : "database"}
Run Code Online (Sandbox Code Playgroud)
但结果我只需要输入字段.如何在查询查询中指定它?
长话短说:是否可以使用Morphia为第三方库类编写类型转换器?
长话:我是Morphia的新手.我有一个实体类,其中包含一个字段类型为javax.activation.MimeType.当我尝试保存我的类的实例时,Morphia抱怨它"无法序列化类javax.activation.MimeType".我尝试编写TypeConverter并将其添加到转换器列表中但它不起作用.以下是代码段:
@Entity
@Converters(MimeTypeConverter.class)
public class Entity {
@Id ObjectId id;
String name;
javax.activation.MimeType mimeType;
}
Run Code Online (Sandbox Code Playgroud)
public class MimeTypeConverter extends TypeConverter {
@Override
public Object decode(Class targetClass,
Object fromDBObject,
MappedField optionalExtraInfo) {
MimeType mimetype;
BasicDBObject dbObject = (BasicDBObject) fromDBObject;
String mimeString = dbObject.getString("mimeType");
try{
mimetype = new MimeType(mimeString);
} catch(MimeTypeParseException ex){
mimetype = new MimeType();
}
return mimetype;
}
@Override
public Object encode(Object value, MappedField optionalExtraInfo) {
MimeType mimetype = (MimeType) value;
return mimetype.getBaseType();
}
@Override …Run Code Online (Sandbox Code Playgroud) 从MongoDB Java驱动程序版本2.10.1设置分片键的语法是什么?
换句话说,我如何使用Java驱动程序执行此操作?
sh.shardCollection("test.a", {"_id": "hashed"}})
Run Code Online (Sandbox Code Playgroud) 我正在使用MongoDB v3.0.1和MongoDB Java Driver 3.0.0-RC1.
我有一个用户集合,其中包含"username","firstname","lastname","email"等字段.
现在我想选择所有用户,但只选择"username","firstname"和"lastname"字段.
在Mongo-Shell上,它正在与之合作 db.user.find({}, { "username" : true , "firstname" : true , "lastname" : true})
但是我怎么能用Java做呢?我试过了
final BasicDBObject query = new BasicDBObject("{}", new BasicDBObject("_id", true));
final MongoCursor<Document> usersCursor = col.find(query)
为此,我得到一个空的结果,因为它被翻译为{ "{}" : { "_id" : true , "firstname" : true , "lastname" : true}}.
我也尝试过使用BasicDBList,但是不接受这个 col.find()
使用"旧"Mongo 2.x驱动程序 new BasicDBObject(BasicDBObject(), new BasicDBObject("username", true).append("firstname", true).append("lastname", true)
是否有可能这样做或者我是否必须获取所有字段?
问候
Sören
我正在使用Mongo数据库存储Java程序中的信息。我正在使用Eclipse和MongoDB 3.0,我遇到的问题是,只要我的程序与Mongo有任何交互,它就会用JULLogger中的红色文本填充控制台。
我目前没有任何代码可以设置记录器级别,因为我在此处或在线其他地方找到的所有示例都给出了错误:
Logger mongoLogger = Logger.getLogger( "org.mongodb.driver" );
mongoLogger.setLevel(Level.SEVERE);
"The method getLogger(String) is undefined for the type Logger"
Run Code Online (Sandbox Code Playgroud)
这是输出:
Dec 16, 2015 8:49:58 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[127.0.0.1:27017],
mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Dec 16, 2015 8:49:58 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description
ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=127.0.0.1:27017,
type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Dec 16, 2015 8:49:58 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:1, serverValue:117}] to 127.0.0.1:27017 …Run Code Online (Sandbox Code Playgroud) 我正在尝试以以下格式从 MongoDB 读取日期字段
Formate: YYYY-MM-dd HH:mm:ss.SSSSSS
2017-01-23-10.46.07.812000 - DB2
2017-01-23T16:46:07.812Z - Stored in MongoDB (While viewing from GUI tool)
Mon Jan 23 22:16:07 IST 2017 - Result/Reading from MongoDB
// Formatter for the input date
final DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
final ZonedDateTime dateFiledParsed = ZonedDateTime.parse(dateFiled.toString(), inputFormat);
final DateTimeFormatter outputFormat3 = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss.SSSSSS");
System.out.println(outputFormat3.format(publicationDateParsed));
Result: 2017-01-23 22:16:07.000000
Run Code Online (Sandbox Code Playgroud)
结果是 2017-01-23 22:16:07。000 000,而不是000它应该是812(原始值:2017-01-23-10.46.07.812000)
注意:使用 MongoDB Java 驱动程序 3.4。
先感谢您!
婆罗提
我有一个包含嵌套文档的文档,我认为根据过滤器,我可以指定诸如 data.sms.mobileNumber 之类的内容。然而这行不通。
我将如何使用标准 Document getString 请求读取 data.sms.mobileNumber 字段中的数据?
示例文档:
{ "_id" : ObjectId("59b850bd81bacd0013d15085"), "data" : { "sms" : { "message" : "Your SMS Code is ABCDEFG", "mobileNumber" : "+447833477560" } }, "id" : "b0a3886d69fc7319dbb4f4cc21a6039b422810cd875956bfd681095aa65f6245" }
Run Code Online (Sandbox Code Playgroud)
示例字段获取字符串请求:
document.getString("data.sms.message")
Run Code Online (Sandbox Code Playgroud)