您无法使用当前架构一步完成此操作。为了让您执行此操作,您需要将问题 ID 与每个标签一起存储,而不是您现在拥有的。通常,与关系数据库相比,在 MongoDB 中,您“以相反的方式”存储集合之间的关系。例如,您可以将其存储为:
标签
{ "tagname": "tag1", "tagid": "id1", "questions" : [ 1, 3 ] }
{ "tagname": "tag2", "tagid": "id2" }
问题
{ "questionid": 1. "title": "question title" }
{ "questionid": 2, "title": "question title" }
{ "questionid": 3, "title": "question title" }
或者也许还有标签:
{ "questionid": 1. "title": "question title", tags: [ "id1" ] }
{ "questionid": 2, "title": "question title" }
{ "questionid": 3, "title": "question title", tags: [ "id1" ] }
您选择哪种变体取决于您的数据需求。存储带有问题的标签,带有标签的问题会使用更多的存储空间,并且如果您需要更新标签/问题也会导致更多的工作,但它确实使查询更容易。例如,在上述修改之后,您可以轻松地询问所有标签而无需提问:
db.tags.find( { questions: { $exists: true } } );
要使用 Java 进行查询,我建议您查看http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/,其中有很多示例。再往下一点是:http ://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-a-set-of-documents-with-a-query这表明你可以执行上述查询,例如:
query = new BasicDBObject("questions", new BasicDBObject("$exists", true));