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

Aggregation Framework を使用して、必要な動詞を取得できます。次のコードでそれを行うことができます。

db.myObject.aggregate(
{ $unwind : "$Q1UsefulStatementsList"},
{ $unwind : "$Q1UsefulStatementsList.Q1ActionsList"},
{$group:{ _id: "$_id", verbs : {$addToSet : "$Q1UsefulStatementsList.Q1ActionsList.Q1Verb"}}}
);

これにより、次のような結果が返されます。

"result" : [
    {
        "_id" : ObjectId("5253e46ae3a2c44e082642c9"),
        "verbs" : ["disabling", "likes"]
    }
]

結果配列をループすることにより、動詞配列を抽出し、それをセットに追加して、一意の動詞を取得できます。

簡単に Java コードに変換できます。

于 2013-10-08T11:23:16.643 に答える