我想在集成测试之前将数据库放入我的 mongo 中。是否可以通过 spring mongo 来做到这一点?
如果现在不可用,是否可以从 spring mongo 以某种方式获取 com.mongodb.DB 对象,以便我可以调用它的 dropDatabase() ?
我对 mongo 有点陌生。我想在一个字段上查询多个值。在 SQL 中,我想要这样的东西:
select * from table where field in ("foo","bar")
Run Code Online (Sandbox Code Playgroud)
假设我在mongodb中有以下文件
{
"_id":"foo"
}
{
"_id":"bar"
}
Run Code Online (Sandbox Code Playgroud)
我只是想模仿这个查询:
db.coll.find( { _id: { $in: [ "foo", "bar" ] } } );
Run Code Online (Sandbox Code Playgroud)
我想检索 _id 为“foo”或“bar”的所有文档。我想使用 java 驱动程序来做到这一点。
我试过类似的东西
BasicDBObject query = new DBObject()
query.append("_id","foo");
query.append("_id","bar");
collection.find(query);
Run Code Online (Sandbox Code Playgroud)
但这似乎只返回“bar”文件。
请帮忙
我有如下所示的文件:
{
name: "testing",
place:"London",
documents: [
{
x:1,
y:2,
},
{
x:1,
y:3,
},
{
x:4,
y:3,
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想检索所有匹配的文档,即我想要以下格式的 o/p:
{
name: "testing",
place:"London",
documents: [
{
x:1,
y:2,
},
{
x:1,
y:3,
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的是:
db.test.find({"documents.x": 1},{_id: 0, documents: {$elemMatch: {x: 1}}});
Run Code Online (Sandbox Code Playgroud)
但是,它只提供第一个条目。
我想做类似的事情
SELECT e1.sender
FROM email as e1, email as e2
WHERE e1.sender = e2.receiver;
Run Code Online (Sandbox Code Playgroud)
但在 MongoDB 中。找了很多关于JOIN的论坛,可以通过MongoDB中的MapReduce实现,但是在这个例子中用self-join不明白怎么做。
我在想这样的事情:
var map1 = function(){
var output = {
sender:db.collectionSender.email,
receiver: db.collectionReceiver.findOne({email:db.collectionSender.email}).email
}
emit(this.email, output);
};
var reduce1 = function(key, values){
var outs = {sender:null, receiver:null
values.forEach(function(v) {
if(outs.sender == null){
outs.sender = v.sender
}
if(outs.receivers == null){
outs.receiver = v.receiver
}
});
return outs; }};
db.email.mapReduce(map2,reduce2,{out:'rec_send_email'})
Run Code Online (Sandbox Code Playgroud)
创建 2 个新集合 - collectionReceiver 仅包含接收者电子邮件和 collectionSender 仅包含发件人电子邮件
或者
var map2 = function(){
var output = …Run Code Online (Sandbox Code Playgroud) 我们在本地网络接口(即192.168.1.x)上设置了一个mongo副本集。副本集成员是唯一知道此接口的成员。这些实例也位于可从我们的网络内部 (10.xxx) 寻址的外部接口上。当尝试仅使用 Java 驱动程序[2.10.1](通过gMongo 包装器)连接到“主节点”时,我们遇到了一个问题,即由于应用程序无法确定其他副本节点而无法建立连接。即使我提供服务器列表中的所有外部接口,也会发生这种情况。
我还需要能够设置从我的计算机到副本集的 SSH 隧道。我再次遇到了同样的问题,因为副本集提供了不适用于我的主机名和 IP 地址。
当副本仅通过本地 IP 地址相互了解时,如何连接到副本集?
以下是代码示例以及由此产生的错误。下面的示例假设已设置从本地主机到远程服务器的隧道。
@Grab(group='com.gmongo', module='gmongo', version='1.1')
import com.gmongo.*
import com.mongodb.*
def hosts= [
[host:'127.0.0.1', port:29017],
//[host:'127.0.0.1', port:29018], //have tried with and without the others commented
//[host:'127.0.0.1', port:29019],
]
List<ServerAddress> addrs = hosts.collect {it.port?new ServerAddress(it.host, it.port):new ServerAddress(it.host)}
MongoClientOptions clientOptions = new MongoClientOptions.Builder().build()
def mongo = new GMongoClient(addrs, clientOptions)
def db = mongo.getDB("mydb")
def result = db.tickets.findOne([:])
println result
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
WARNING: couldn't resolve host [mongo03:27017]
May 16, 2013 …Run Code Online (Sandbox Code Playgroud) 我从 mongodb 获得了不同的字段值。当我在命令行中运行以下查询时,效果很好。
db.celldata.distinct("tenentId")
我正在使用 Mongo java 3.0 驱动程序,使用以下查询检索不同的值
MongoCursor<String> iterator = coll.distinct("tenantId", String.class).iterator();
当我运行查询时,出现以下异常
org.bson.BsonInvalidOperationException: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is NULL.
如何在Spring Data-MongoDB框架的聚合方法中设置“ allowDiskUse ”选项?
mongodb mongodb-java spring-data aggregation-framework spring-data-mongodb
我们正在尝试为此设置我们自己的转换器,Spring Data Mongo并遇到了问题。
好像Spring从不要求registerConvertersIn使用CustomConversions,因此通过重写添加的自定义转换器AbstractMongoConfiguration#customConversions永远不会成为转换的一部分。
我们正在使用Spring Data Mongo 1.6.3,但对于1.8.0来说似乎也可能是个问题(我检查了对的调用,CustomConversions#registerConvertersIn但均未找到。)
我可以通过这样的CustomConversions#registerConvertersIn自定义调用来解决此问题MappingMongoConverter:
class MongoConfig extends AbstractMongoConfiguration {
@Bean
@Override
public MappingMongoConverter mappingMongoConverter() throws Exception {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext()) {
@Override
public void setCustomConversions(CustomConversions conversions) {
super.setCustomConversions(conversions);
conversions.registerConvertersIn(conversionService);
}
};
converter.setCustomConversions(customConversions());
return converter;
}
}
Run Code Online (Sandbox Code Playgroud)
那是一个错误还是我们做错了什么?
找到了另一种解决方法:https : //stackoverflow.com/a/14369998/4567261
我在这里学习MongoDB.我坚持使用MongoDB Java驱动程序执行非常基本的操作.我试图从文档中的数组中删除一个元素.该文件如下:
db.test.find().pretty()
{
"_id" : ObjectId("581245dd51030d389f5cf701"),
"name" : "Rahul",
"scores" : [
{
"SDM" : 97
},
{
"SE" : 96
},
{
"DM" : 80
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试图删除数组中的第二个元素即{"SE" : 96}.我明白我可以用这个来实现coll.update(match, new BasicDBObject("$pull", update));.但是我想利用这个com.mongodb.client.model.Updates.pull(final String fieldName, final TItem value)方法.
这是我在发布问题之前尝试过的:
1)当我尝试这个时,我没想到会发生任何事情,而且确实没有对文件进行任何修改.
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("SE", 96);
collection.updateOne(filter, delete);`
Run Code Online (Sandbox Code Playgroud)
2)以下是抛出异常.
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("scores.SE", 96);
collection.updateOne(filter, delete);`
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread …Run Code Online (Sandbox Code Playgroud) 我无法使用Java 3.4.2驱动程序从MongoDB中读取blob(二进制)记录。
BasicDBObject whereClause = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000"));
whereClause.put("$and", obj);
MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator();
while (cursor.hasNext()) {
Document object = cursor.next();
System.out.println(object.getString("blobcontentid"));
if (object.get("content") != null){
byte[] content = (byte []) object.get("content");
} else {
System.out.println("Content is empty");
}
}
Run Code Online (Sandbox Code Playgroud)
错误:java.lang.ClassCastException:org.bson.types.Binary无法转换为[B
在DB2中,相同的记录正在读取。byte [] content = aResult.getBytes(“ CONTENT”);
先感谢您!巴拉提
mongodb-java ×10
mongodb ×9
java ×4
arrays ×1
gmongo ×1
json ×1
self-join ×1
spring ×1
spring-data ×1