Java & MongoDB - 嵌入式文档
要在集合中插入带有嵌入文档的文档,可以使用 DBObject/BasicDBObject 对象,如下所示 −
// Create an embedded document BasicDBObject comment = new BasicDBObject(); comment.put("user", "User1"); comment.put("message", "My First Comment"); comment.put("dateCreated", "20/2/2020"); comment.put("like", "0"); // create an array List<String> tags = new ArrayList<String>(); tags.add("mongodb"); tags.add("database"); tags.add("NoSQL"); // add array and embedded documents Document document = new Document("title", "MongoDB Overview") .append("tags",tags) .append("comment", comment);
示例
以下是插入带有嵌入文档的文档并显示它们的代码片段 −
import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class Tester { public static void main(String[] args) { // Creating a Mongo client MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); MongoDatabase database = mongoClient.getDatabase("myDb"); // Create the collection database.createCollection("post"); MongoCollection<Document> collection = database.getCollection("post"); List<String> tags = new ArrayList<String>(); tags.add("mongodb"); tags.add("database"); tags.add("NoSQL"); BasicDBObject comment1 = new BasicDBObject(); comment1.put("user", "User1"); comment1.put("message", "My First Comment"); comment1.put("dateCreated", "20/2/2020"); comment1.put("like", "0"); BasicDBObject comment2 = new BasicDBObject(); comment2.put("user", "User2"); comment2.put("message", "My Second Comment"); comment2.put("dateCreated", "20/2/2020"); comment2.put("like", "0"); List<DBObject> comments = new ArrayList<DBObject>(); comments.add(comment1); comments.add(comment2); Document document = new Document("title", "MongoDB Overview") .append("description", "MongoDB is no SQL database") .append("by", "tutorials point") .append("url", "http://www.tutorialspoint.com") .append("tags",tags) .append("comments", comments); collection.insertOne(document); FindIterable<Document> documents = collection.find(Filters.eq("title","MongoDB Overview")); for (Document doc : documents) { System.out.println(doc); } } }
现在,让我们编译并运行上面的程序,如下所示。
$javac Tester.java $java Tester
在执行时,上面的程序会有以下输出。
输出
Document{{_id=60b7ab7614bd6b4a14b46d47, title=MongoDB Overview, description=MongoDB is no SQL database, by=tutorials point, url=http://www.tutorialspoint.com, tags=[mongodb, database, NoSQL], comments=[Document{{user=User1, message=My First Comment, dateCreated=20/2/2020, like=0}}, Document{{user=User2, message=My Second Comment, dateCreated=20/2/2020, like=0}}] }}