0

図のようにMongoDBコレクションがあります

{
    "name": "SAM",
    "collection": [
        {
            "date": "2013-03-16",
            "values": [
                {
                    "price": "24.0"
                }
            ]
        },
        {
            "date": "2013-04-20",
            "values": [
                {
                    "price": "10.0"
                }
            ]
        },
        {
            "date": "2013-05-18",
            "values": [
                {
                    "price": "12.0"
                }
            ]
        },
        {
            "date": "2013-06-22",
            "values": [
                {
                    "price": "10.0"
                }
            ]
        },
        {
            "date": "2013-09-21",
            "values": [
                {
                    "price": "38.0"
                }
            ]
        }
    ]
}

示されているように、特定の日付(2013-03-16)に関連するデータを取得しようとしましたが、すべての日付のデータを取得しています。

これは私が試したものです。

どこでミスをしているのか教えてください。

package com;

import java.net.UnknownHostException;

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

public class Test {

    public static void main(String args[]) throws UnknownHostException {
        Mongo mongo = new Mongo();
        DB db = mongo.getDB("test");
        DBCollection mycollection = db.getCollection("mycollection");

        BasicDBObject query = new BasicDBObject();
        query.put("name", "SAM");
        query.put("collection.date", "2013-03-16");

        DBCursor cursor = mycollection.find(query);

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

    }

}
4

2 に答える 2

1

位置射影演算子を使用して、次$のフィールド選択パラメーターでこれを行うことができfindます。

BasicDBObject query = new BasicDBObject();
query.put("name", "SAM");
query.put("collection.date", "2013-03-16");
BasicDBObject fields = new BasicDBObject();
fields.put("name", 1);
fields.put("collection.$", 1);

DBCursor cursor = mycollection.find(query, fields);
于 2013-03-01T19:52:33.707 に答える
0

配列コレクション内の要素をクエリしようとしています。代わりに$elemMatchを使用する必要があります。

query.put("collection.date", "2013-03-16");

あなたはで試すことができます

query.put("collection", new BasicDBObject("$elemMatch", new BasicDBObject("date","2013-03-16")));

詳細については、http://docs.mongodb.org/manual/reference/projection/elemMatch/をご覧ください。

于 2013-03-01T19:45:33.193 に答える