Java & MongoDB - 引用文档

要在集合中插入带有引用文档的文档,可以使用 DBRef 对象,如下所示 −

// create a document
Document comment1 = new Document();
comment1.put("_id", "comment1");
comment1.put("user", "User1");
comment1.put("message", "My First Comment");
comment1.put("dateCreated", "20/2/2020");
comment1.put("like", "0");

// create a database reference
DBRef comment1Ref = new DBRef("post", comment1.get("_id"));

// insert the reference in the document
Document document = new Document("title", "Java Overview")
.append("comment1", comment1Ref);

示例

以下是插入包含引用文档的文档并显示它们的代码片段 −

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.DBRef;
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");
      MongoCollection<Document> collection = database.getCollection("post");
      List<String> tags = new ArrayList<String>();
      tags.add("mongodb");
      tags.add("database");
      tags.add("NoSQL");

      Document comment1 = new Document();
      comment1.put("_id", "comment1");
      comment1.put("user", "User1");
      comment1.put("message", "My First Comment");
      comment1.put("dateCreated", "20/2/2020");
      comment1.put("like", "0");

      DBRef comment1Ref = new DBRef("post", comment1.get("_id"));

      Document comment2 = new Document();
      comment2.put("_id", "comment2");
      comment2.put("user", "User2");
      comment2.put("message", "My Second Comment");
      comment2.put("dateCreated", "20/2/2020");
      comment2.put("like", "0");

      DBRef comment2Ref = new DBRef("post", comment2.get("_id"));

      List<Document> comments = new ArrayList<Document>();
      comments.add(comment1);
      comments.add(comment2);

      Document document = new Document("title", "Java Overview")
         .append("description", "Java is programming language")
         .append("by", "tutorials point")
         .append("url", "http://www.tutorialspoint.com")
         .append("tags",tags)
         .append("comment1", comment1Ref)
         .append("comment2", comment2Ref);

      collection.insertMany(comments);
      collection.insertOne(document);

      FindIterable<Document> documents = collection.find(Filters.eq("title","Java Overview"));

      for (Document doc : documents) {
         System.out.println(doc);
      }
   }
}

现在,让我们编译并运行上面的程序,如下所示。

$javac Tester.java 
$java Tester

输出

在执行时,上面的程序会有以下输出。

Document{{_id=60b7b26b7671f469993fdc3c, title=Java Overview, 
   description=Java is programming language, by=tutorials point, 
   url=http://www.tutorialspoint.com, tags=[mongodb, database, NoSQL], 
   comment1={ "$ref" : "post", "$id" : "comment1" }, comment2={ "$ref" : "post", "$id" : "comment2" }
}}