2

DB インタラクションに Java Mongo ドライバーを使用しています。DB 行と完全にネストされたオブジェクトに対して定期的に更新を実行する必要があります。このようなもの :

マイオブジェクト:

{
    _id: dbGeneratedId,
    myId: "A String ID that i created",
    myTime: "new Date()",
    myList: 
        [
        {
            myString: "abcdefghij",
            myInteger: 9000
        },
        {
            myString: "qwertyasdf",
            myInteger: 9001
        },
        {
            myString: "loremipsum",
            myInteger: 9002
        }
    ]
}

各更新には、新しいリスト項目を下に追加するか、各リスト項目のオブジェクトにmyList文字列を追加することが含まれます。myStringアイテムの書き込み/検索に関するリファレンスはたくさん見つかりましたが、ネストされたオブジェクト内のアイテムの更新に関するリファレンスはありませんでした。誰かがこれで私を助けることができますか?

myInteger編集1:検索に基づいてリスト項目の1つを取得する方法を誰かが指摘してくれると助かります

PS:Javaを介してmongoを初めて使用します。無知を許してください

4

1 に答える 1

2

$push演算子を使用して、新しいリスト項目を挿入できます。

シェルで次のコマンドを実行して、新しいリスト項目を追加できます。

db.myObject.update({"myId" : "A String ID that i created"},{$push:{myList: {myString:"new string", myInteger:9003}}})

次のように、Java Driver を使用してリスト項目を追加できます。

        DBCollection coll = db.getCollection("myObject");
        DBObject query = new BasicDBObject("myId", "A String ID that i created");

        DBObject listItem = new BasicDBObject();
        listItem.put("myString", "my new string");
        listItem.put("myInteger", 9003);

        DBObject updateObj = new BasicDBObject("myList", listItem);

        coll.update(query, new BasicDBObject("$push", updateObj));

シェルでは次のように単一の要素を取得できます。

db.myObject.find({"myList.myInteger" : 9003}, {"myList.$" : 1})

Java ドライバーから、次のように同じコードを実行できます。

DBCursor cur = coll.find(new BasicDBObject("myList.myInteger", 9003), new BasicDBObject("myList.$", 1));

次のようにオブジェクトを削除できます。

db.nested.update({"myId" : "A String ID that i created"},{$pull:{myList: {myString:"new string", myInteger:9003}}})

Java では、次のように実行できます。

    DBCollection coll = db.getCollection("myObject");
    DBObject query = new BasicDBObject("myId", "A String ID that i created");

    DBObject listItem = new BasicDBObject();
    listItem.put("myString", "my new string");
    listItem.put("myInteger", 9003);

    DBObject updateObj = new BasicDBObject("myList", listItem);

    coll.update(query, new BasicDBObject("$pull", updateObj));

PS : 現在、配列内のすべての項目を更新することはできません。Jira に未解決の問題があります。JIRA-1243から確認できます

于 2013-09-04T10:43:01.233 に答える