我是MongoDB的新手。 我在MongoDB中创建了一个集合并存储了以下
Q1UsefulStatementsList: [{
Q1UsefulStatement: "Useful Sentence"
Q1ActionsList: [{
Q1Verb: "Verb in the sentence"
Q1NP: "The Noun phrase"
Q1PP: "The Preposition phrase"
}]
}]
Q2UsefulStatementsList: [{
Q2UsefulStatement: "Useful Sentence"
Q2ActionsList: [{
Q2Verb: "Verb in the Sentence"
Q2NP: "The Noun phrase"
Q2PP: "The preposition Phrase"
}]
}]
我需要循环遍历此集合并从Q1UsefulStatementsList和Q2UsefulStatementsList获取所有动词。 例如:
Q1UsefulStatementsList: [{
Q1UsefulStatement: "My dog also likes eating sausage"
Q1ActionsList: [{
Q1Verb: "likes"
Q1NP: "My dog"
Q1PP: "n / a"
}]
} {
Q1UsefulStatement: "The disabling of log helps"
Q1ActionsList: [{
Q1Verb: "disabling"
Q1NP: "disaabling of logs"
Q1PP: "of"
}]
}]
Q2UsefulStatementsList: [{
Q2UsefulStatement: "Log analysis failed"
Q2ActionsList: [{
Q2Verb: "failed"
Q2NP: "Log analysis"
Q2PP: "n / a"
}]
}]
我想得到'喜欢'并且'禁用'当我运行Q1UsefulStatementsList时作为输出。
我使用下面的代码尝试过它。但有没有更简单的方法在MongoDB中做这些事情?
我尝试使用'点运算符'喜欢(Q1UsefulStatementsList.Q1UsefulStatement)但它给我的是一个完整的BSON(JSON)对象。我需要的是直接实际的个人价值。
如果有任何建议,请提出建议。
我为提取值而编写的Java代码
if (object.get("Q1UsefulStatementsList") != null) {
BasicDBList qUseStatementList = (BasicDBList)(object.get("Q1UsefulStatementsList"));
for (Object qUsefulStatement: qUseStatementList) {
DBObject tmp = (DBObject) qUsefulStatement;
if (tmp.get("Q1ActionsList") != null) {
BasicDBList qActionsList = (BasicDBList) tmp.get("Q1ActionsList");
for (Object qVerbs: qActionsList) {
DBObject tmpQVerbs = (DBObject) qVerbs;
String verb = (tmpQVerbs.get("Q1Verb").toString());
String nP = (tmpQVerbs.get("Q1NP").toString());
String pP = (tmpQVerbs.get("Q1PP").toString());
}
}
}
}
答案 0 :(得分:0)
您可以使用聚合框架来获取所需的动词。您可以使用以下代码执行此操作。
db.myObject.aggregate(
{ $unwind : "$Q1UsefulStatementsList"},
{ $unwind : "$Q1UsefulStatementsList.Q1ActionsList"},
{$group:{ _id: "$_id", verbs : {$addToSet : "$Q1UsefulStatementsList.Q1ActionsList.Q1Verb"}}}
);
这将返回如下结果:
"result" : [
{
"_id" : ObjectId("5253e46ae3a2c44e082642c9"),
"verbs" : ["disabling", "likes"]
}
]
通过循环结果数组,您可以提取谓词数组并将其添加到Set中以获得唯一的动词。
您可以轻松将其转换为Java代码。