I am new to mongodb and I am using a database with a single document in a collection called "Counts". Entering that data is done by the code itself and after entering that data, the document looks like in the first picture.
After that I use the below code sample to read data.
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
DB db = mongoClient.getDB( "OneMedia" );
System.out.println("Connect to database successfully");
DBCollection coll = db.getCollection("Counts");
System.out.println("zzzzzzzzzzzzzzzzzz");
DBCursor curs = coll.find();
Iterator<DBObject> fields = curs.iterator();
while(fields.hasNext()){
BasicDBList List = (BasicDBList) fields.next().get("counts");
BasicDBObject object = (BasicDBObject) List.get(0);
Object value = object.get("comments_count"); /
System.out.println("comments - " + value.toString());
}
Every time I run that code to read data, the document in the collection duplicates and creates another document inside same collection.
Can some one please help me with this.
When you running the code you added a new document. as you say. Since it added to the database it is there even you closed the programe. But if you need to delete all the data in the collection you can use coll.drop(); before you add new document into the database.
Related
I have the following code and my aim is to retrieve the documents which have the given tags.
String myText = "It is the first #example and is very #important";
ArrayList<String> tags = textProcessor.getTags(myText);
try {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("myFirstDatabase");
DBCollection table = db.getCollection("firstCollection");
BasicDBObject document = new BasicDBObject();
document.put("Text", myText);
document.append("tags", tags);
table.insert(document);
/**** Find and display ****/
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("tags", "#important");
DBCursor cursor = table.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
It does not work, because the tagsis an array and I am searching for an element in the array. How can I retrieve the documents which have the given tag (in this case "important") directly?
I know that I can extract all the tags of all documents and then compare them in a loop. But I would like to do that directly.
In the meantime, I am completely new to mongodb. If there is a better way to insert tags in the database (so that, its retrieving is easier), I would be grateful to know.
Thanks in advance,
Mongodb list can be queried through a single string query just fine, you should check the textProcessor.getTags and check the data in the mongodb. I also suggest you to use spring-data-mongodb since it is much simpler and easier to learn.
By default, mongodb adds documents to the end of collection. However, I want them to be added at the first position in the collection. The code I have is,
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("test");
DBCollection collection = db.getCollection("lwjsons");
BasicDBObject document = new BasicDBObject();
collection.insert(dbObject);
Use sort when querying.
Just use db.collection.find().sort({_id:-1}).
You are saving documents to collection. It is not like push or unshift in javascript.
I want to auto-increment 'Project_ID' using mongo DB. I need to put 'Project_ID' value as 'demo_1', so using this value when I trying to auto-increment this value, it showing error: can not increment non numeric id.
public static Object getNextSequence(String Project_ID) throws Exception{
// MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// Now connect to your databases
// DB db = mongoClient.getDB("demo");
DB db=ConnectToDB.getConnection();
Properties prop = new Properties();
InputStream input = null;
input = Demo.class.getClassLoader().getResourceAsStream("config.properties");
prop.load(input);
String col=prop.getProperty("COLLECTION_DEMO");
DBCollection collection = db.getCollection("counters");
BasicDBObject find = new BasicDBObject();
find.put("_id", Project_ID);
BasicDBObject update = new BasicDBObject();
update.put("$inc", new BasicDBObject("seq", 1));
DBObject obj = collection.findAndModify(find, update);
db.getMongo().close();
return obj.get("seq");
}
Please let me know what is the issue there or what is the possible way to achieve this. Thanks.
Your explanation of what you're trying to autoincrement does not match the code, never mind the error. You're code is trying to autoincrement seqin a document keyed by Project_ID, in this case demo_1.
I ran your code although I got no errors, it is possible you don't have a "seed" record to findAndModify(). Try running this to create your seed:
db.counters.drop();
db.counters.insert({_id: "demo_1", seq: NumberInt("0")});
then run your code.
Also: You are connecting and closing the connection with each call to getNextSequence. That will be really slow. I recommend you open the DB and capture the collection in main()and close it upon exit.
I want to delete all documents in a collection in java. Here is my code:
MongoClient client = new MongoClient("10.0.2.113" , 27017);
MongoDatabase db = client.getDatabase("maindb");
db.getCollection("mainCollection").deleteMany(new Document());
Is this the correct way to do this?
I am using MongoDB 3.0.2
Using API >= 3.0:
MongoClient mongoClient = new MongoClient("127.0.0.1" , 27017);
MongoDatabase db = mongoClient.getDatabase("maindb");
db.getCollection("mainCollection").deleteMany(new Document());
To drop the collection (documents and indexes) you still can use:
db.getCollection("mainCollection").drop();
see https://docs.mongodb.org/getting-started/java/remove/#remove-all-documents
To remove all documents use the BasicDBObject or DBCursor as follows:
MongoClient client = new MongoClient("10.0.2.113" , 27017);
MongoDatabase db = client.getDatabase("maindb");
MongoCollection collection = db.getCollection("mainCollection")
BasicDBObject document = new BasicDBObject();
// Delete All documents from collection Using blank BasicDBObject
collection.deleteMany(document);
// Delete All documents from collection using DBCursor
DBCursor cursor = collection.find();
while (cursor.hasNext()) {
collection.remove(cursor.next());
}
If you want to remove all documents in collection then used below code :
db.getCollection("mainCollection").remove(new BasicDBObject());
Or If you want to drop whole collection then used this :
db.getCollection("mainCollection").drop();
For newer mongodb drivers you can use FindIterable to remove all documents in collection.
FindIterable<Document> findIterable = collection.find();
for (Document document : findIterable) {
collection.deleteMany(document);
}
I am new to mongodb java api. I am trying to perform queries to my database. I ve read the database found the collections in it and I want to retrieve characteristics of users. My code:
ServerAddress serverAdr;
serverAdr = new ServerAddress(".. .. .., ...);
Twitter twitter = null;
MongoOptions options = new MongoOptions();
options.connectionsPerHost = 10;
MongoClient mongoClient = new MongoClient(.. ... ...", ...);
DB db = mongoClient.getDB("trendSetters");
System.out.println("Connect to database successfully");
//JSONObject content = getJSONFromFile("user.json");
Mongo mongo = null;
Set<String> colls = db.getCollectionNames();
mongo = new Mongo(serverAdr, options);
mongo.setWriteConcern(WriteConcern.SAFE);
DB db_se = mongo.getDB("iti_se");
DBCollection incollection = db_se.getCollection("cms_users_unique");
DBCollection outcollection = db_se.getCollection("cms_users_features");
for (String s : colls) {
System.out.println(s);
}
Now I want to perform queries to retrieve from all ids the usernames for example. How is it possible to do so in java mongodb API?
EDIT: What i ve tried
BasicDBObject query = new BasicDBObject();
DBCursor cursor;
query = new BasicDBObject("followers", new BasicDBObject("$gt", 1));
cursor = incollection.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
However, it doesnot return nothing.
You asked: "I want to perform queries to retrieve from all ids the usernames for example."
To retrieve all documents from collection you can use find() method of the DBCollection.
DBCursor cursor;
cursor = incollection.find();
After that, you can get the field value by its name for each document as below
while(cursor.hasNext()){
System.out.println(cursor.next().get("username"));
}
If you need to add more criterias to query documents:
BasicDBObject query1;
DBCursor cursor;
query1 = new BasicDBObject("age", new BasicDBObject("$gt", 25));
cursor = incollection.find(query1);
while(cursor.hasNext()){
System.out.println(cursor.next().get("username"));
}
DBCollections objects have method find which takes mainly a DBObject argument. For instance, if you want to find users with age > 50 this can help you.
query = new BasicDBObject("age", new BasicDBObject("$gt", 50));
cursor = incollection.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
BasicDBObject take first argument, that is a field, and second argument that is another BasicDBObject or a value. With composition of these objects you can build any query.
I recommend you take a look at MongoDB Documentation, it's pretty good.
Mongo Java Driver http://docs.mongodb.org/ecosystem/drivers/java/
See Javadoc. http://api.mongodb.org/java/current/