我有一个名为resource的MongoDB集合.它有以下文件:
{ "_id" : "Abb.e", "_class" : "Resource", "resourceEmail" : "test1@test.com" }
{ "_id" : "Dasd.tt", "_class" : "Resource","resourceEmail" : "test2@test.com" }
{ "_id" : "Bbb.rr", "_class" : "Resource", "resourceEmail" : "test3@test.com" }
Run Code Online (Sandbox Code Playgroud)
在Java代码中,我将它们列出如下:
MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate();
List<Resource> resourceList = mongoOperations.findAll(Resource.class);
return resourceList;
Run Code Online (Sandbox Code Playgroud)
我怎么能按ID排序这些文件!
我正在使用morphia github 1.2.2版.我知道如何在morphia实体上的一个字段上注释索引,但有没有办法在两个字段的组合上注释索引.例如,如果我想在字段a和b上有一个复合索引,那么下一个类的注释是什么.
@Entity
public class TestClass
{
@Property("a")
private int fieldA;
@Property("b")
private int fieldB;
//how to annotate index of compound key fieldA and fieldB using morphia index annotation?
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
MongoDB Java驱动程序中是否有一种方法可以调用db.collection.remove(query)我在MongoDB shell文档中看到的方法?也就是说,我知道我需要找到我想从MongoDB中删除的所有文档的确切标准,但我找不到一种方法来一次调用删除那些记录.我能弄清楚的就是找到文件,然后逐一删除它们.
我看到这个 http://docs.mongodb.org/manual/reference/method/db.collection.remove/ 这暗示应该有办法做到这一点,但我无法弄清楚Java调用让我这么做那个电话.
谢谢您的帮助
我正在玩Java的MongoDB驱动程序.所以我刚刚创建了一个简单的应用程序来连接到MongoDB服务器并选择一个数据库.
所以我创建了一个实例MongoClient并选择了一个'DB':
try
{
MongoClient client = new MongoClient("localhost", 27017);
DB database = client.getDB("example");
}catch(Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
由于mongod我的机器上没有正在运行的实例,我预计client会抛出一个Exception.不幸的是情况并非如此.
即使选择数据库也没有任何反应.它就像有一个正在运行的mongod实例一样.
我查看了有关Java驱动程序的文档,但找不到任何有关它的信息.与Google相同.
我错过了什么吗?
我正在使用官方网站上的最新MongoDB驱动程序(版本2.12.2).
我试图在一个事务中从java插入一个带序列号的文档.
与此类似的东西:
function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
return ret.seq;
}
collection.insert({
number: getNextSequence("userid"),
name: "Some Name"
});
Run Code Online (Sandbox Code Playgroud)
是否有可能从java做到这一点?最好用官方的java驱动程序.
我尝试将String ID转换为MongoDB ObjectID
public class relevancy_test extends Object implements Comparable<ObjectId> {
public static void main(String[] args) throws UnknownHostException {
MongoClient mongo = new MongoClient("localhost", 27017);
DB mydb = mongo.getDB("test");
DBCollection mycoll = mydb.getCollection("mytempcoll");
BasicDBObject query = null;
Map<ObjectId, DBObject> updateMap = new HashMap<ObjectId, DBObject>();
List<DBObject> dbobj = null;
DBCursor cursor = mycoll.find();
dbobj = cursor.toArray();
for (DBObject postObj : dbobj) {
String id = postObj.get("_id").toString();
ObjectId objId = new ObjectId((String) postObj.get("_id"));
updateMap.put(objId, postObj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这(String) postObj.get("_id")是表格 …
这是我用来运行map reduce on sourceCollectionName和获取输出的代码targetCollectionName.但是永远不会创建targetCollectionName.
new MongoClient("localhost").getDatabase(dbName).getCollection(sourceCollectionName)
.mapReduce(map, reduce)
.action(MapReduceAction.REPLACE)
.databaseName(dbName)
.collectionName(targetCollectionName)
.sharded(false);
Run Code Online (Sandbox Code Playgroud)
虽然我能够MapReduceIterable在迭代时获得输出,但结果会按预期转储.这是正确的方法吗?
MapReduceIterable mapReduceIterable = new MongoClient("localhost").getDatabase(dbName).getCollection(sourceCollectionName)
.mapReduce(map, reduce)
.action(MapReduceAction.REPLACE)
.databaseName(dbName)
.collectionName(targetCollectionName)
.sharded(false);
for(Object o:mapReduceIterable){
//Just Iterating makes map reduce to dump output collection
}
Run Code Online (Sandbox Code Playgroud) 我知道有很多问题,并且答案很好.问题是所有这些问题都使用MongoDBObject,MongoDBList来检索数组.我的问题是我正在使用http://api.mongodb.org/java/3.0/index.html?overview-summary.html api,我很难检索数组并向其中添加元素.我必须使用MongoCollection,MongoDatabase和MongoClient.我正试图解决mongodb课程的作业.问题陈述是找到一个数组并在mongod中更新它.
这是我尝试过的
Document post = null; Bson filter = new Document("permalink",
permalink); Bson projection = new Document("comments", true);
List<Document> comments = postsCollection.find(filter)
.projection(projection).into(new ArrayList<Document>());
System.out.println(comments);
post = postsCollection.find(Filters.eq("permalink",
permalink)).first();
Document newComment = new Document();
newComment.append("author", name); newComment.append("body", body);
if (email != null && (!email.equals(""))) {
newComment.append("email", email); }
comments.add(newComment);
Bson filter2 = new Document("_id", post.get("_id"));
System.out.println(comments); post =
postsCollection.find(filter).first();
postsCollection.updateOne(filter2, new Document("$unset",new
Document("comments",true))); postsCollection.updateOne(filter2, new
Document("$set", new Document( "comments", comments)));
Run Code Online (Sandbox Code Playgroud)
这不会创建新评论.相反,它在comments数组本身中创建了另一个注释数组.数组应该在学生中更新
这是json数据 …
DB db = mongo.getDB("sample");
DBCollection table = db.getCollection("samplecollection");
DBCursor cursor2 = table.find();
Run Code Online (Sandbox Code Playgroud)
给出的结果为:{“ _id”:{“ $ oid”:“ 58bfbcff1d30d8a8c1194328”},“ ID”:1,“ NAME”:“ dgsdg”}
如何获取没有objectid的文档?
我想用docker设置一个MongoDB副本集。设置似乎很好,但是我无法使用Java应用程序连接到集群。我正在Windows 10上使用VirtualBox作为驱动程序运行Docker版本17.06.0-ce。
我按照本教程中的说明进行操作:http : //www.sohamkamani.com/blog/2016/06/30/docker-mongo-replica-set/
因此,我首先在docker中创建了my-mongo-cluster网络,并使用以下命令运行3个容器:
$ docker run --name mongo1 -d --net mongo-cluster -p 9042:27017 mongo:3.6.0 mongod --replSet my-mongo-set
$ docker run --name mongo2 -d --net mongo-cluster -p 9142:27017 mongo:3.6.0 mongod --replSet my-mongo-set
$ docker run --name mongo3 -d --net mongo-cluster -p 9242:27017 mongo:3.6.0 mongod --replSet my-mongo-set
Run Code Online (Sandbox Code Playgroud)
然后,我连接到mongo1容器,并使用以下配置设置副本集:
config = {"_id" : "my-mongo-set", "members" : [{"_id" : 0,"host" : "mongo1:27017"},{"_id" : 1,"host" : "mongo2:27017"},{"_id" : 2,"host" : "mongo3:27017"}]}
rs.initiate(config)
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常。从mongo1容器的日志中可以看出,所有容器都是相互连接的。
现在,我正在尝试从Java应用程序连接到副本集。我正在使用3.6.0版的mongodb驱动程序。这是我用来连接到在docker中运行的副本集的代码:
List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
serverAddresses.add(new ServerAddress(InetAddress.getByName("192.168.99.100"), …Run Code Online (Sandbox Code Playgroud)