0

我是 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());

            }
        }
    }
}
4

1 回答 1

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 代码。

于 2013-10-08T11:23:16.643 回答