2

次のmongoクエリをjavaに変換する必要があります。

db.sample.find( { name:"abc" }, { _id: 0, cities: { $elemMatch: { cityName: "A" }}});

いろいろ試してみましたが、正しい方法がわかりませんでした。

    BasicDBObject eleMatch = new BasicDBObject();
    eleMatch.put("cityName","A");
    BasicDBObject up = new BasicDBObject();
    up.put("$elemMatch",eleMatch);
    BasicDBObject query = new BasicDBObject();
    query.put("name","abc");
    query.put("cities",up);
    DBCollection dbcoll = mongoTemplate.getCollection("sample");
    DBObject object = dbcoll.findOne(query);

ただし、このオブジェクトの結果にはidが含まれます。だから私はそれを取り除く必要があります。

4

1 に答える 1

4

findOneメソッドの2番目のパラメーターとして取得したフィールドを指定する必要があります

BasicDBObject retrievedField = new BasicDBObject();
retrievedField.put("_id",0);

dbcoll.findOne(query, retrievedField);

また、表示した正確なクエリを取得する場合は、クエリオブジェクトに追加するのではなく、elemMatchオブジェクトをretrieveFieldsに追加する必要があると思います。

BasicDBObject eleMatch = new BasicDBObject();
eleMatch.put("cityName","A");
BasicDBObject up = new BasicDBObject();
up.put("$elemMatch",eleMatch);
retrievedField.append(up);

BasicDBObject query = new BasicDBObject();
query.put("name","abc");

DBCollection dbcoll = mongoTemplate.getCollection("sample");
DBObject object = dbcoll.findOne(query, retrievedField);
于 2013-01-25T12:13:47.713 に答える