4

MongoDB での Java のクエリに少し問題があります。

データベースには次の構造があります。

            {
              "_id" : ObjectId("5059c214707747cbc5819f6f"),
              "id" : "7",
              "title" : "test4",
              "keywords" : "keyword 1, keyword 2",

              "partner" : {
                "id" : "1",
                "name" : "partner",
                "keywords" : "partner keyword 1, partner keyword 2"
              },
              "status" : {
                "id" : "0",
                "name" : "Expired"
              },

              "modified" : "2012-09-27"
            }

フィールド「Status.name」のデータベースへのクエリが必要です。例 SELECT * FROM table WHERE status.name = 'Expired'

MongoDB の Java でこのようなクエリを実行するにはどうすればよいですか?

助けや提案をありがとう!

4

4 に答える 4

12

次に例を示します。

import com.mongodb.Mongo;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCursor;
import com.mongodb.DB;

public class MongoTest {

    public static void main(String[] args) throws Exception {

        // connect to the local database server
        Mongo m = new Mongo();

        DB db = m.getDB( "test" );

        DBCollection coll = db.getCollection("test");

        // delete all the data from the 'test' collection
        coll.drop();

        // make a document
        BasicDBObject doc = new BasicDBObject();

        doc.put("id", 7);
        doc.put("title", "test4");
        doc.put("modified", "2012-09-27");

        BasicDBObject status = new BasicDBObject();

        status.put("id", "1");
        status.put("name", "Expired");

        doc.put("status", status);

        // insert
        coll.insert(doc);

        BasicDBObject query = new BasicDBObject("status.name", "Expired");

        //  run the query and print the results out
        DBCursor cursor = coll.find(query);

        try {
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        } finally {
            cursor.close();
        }

        m.close();
    }
}
于 2012-10-01T09:26:32.893 に答える
4

MongoDB は「一致オブジェクト」をクエリとして使用します。status.nameしたがって、「Expired」に等しいオブジェクトを見つけるには、次のようにオブジェクトをフィードできます。

{ "status.name": "Expired" }

Java からDBOjbect、上記のような を作成して一致として使用し (一致オブジェクトと一致するものすべてを返す)、それをクエリとしてデータベースに送信する必要があります。Java から MongoDB に接続できると仮定して、findメソッドを使用して目的のクエリを実行します。

于 2012-10-01T09:16:58.377 に答える