0

私は2つのコレクションを持っています

checkone
  {"_id":1,"name":"alex"},
  {"_id":2,"name":"sandy"}

checktwo
  {"_id":11,"password":"alex",tenant_id:{$ref:"checkone","$id":1}}
  {"_id":12,"password":"suman",tenant_id:{$ref:"checkone","$id":2}}

dbref fetch を実行すると、それを参照するすべてのフィールドが取得されます。

DBCursor cursor = coll.find();
while(cursor.hasNext()){
  DBRef addressObj = (DBRef)cursor.next().get("tenant_id");
  System.out.println(addressObj.fetch());   
}

出力:

{"_id":1,"name":"alex"},
{"_id":2,"name":"sandy"}

しかし、それを制限する方法は NAME フィールドだけを取得する必要があります。私はこのようにしてみました。

BasicDBObject query=new BasicDBObject();

Map<String, Object> whereMap = new HashMap<String, Object>();
whereMap.put("tennat_id", 1);
query.putAll(whereMap); 
BasicDBObject field=new BasicDBObject("name",1);
DBCursor cursor = coll.find(query,field);

while(cursor.hasNext()){
    DBRef addressObj = (DBRef)cursor.next().get("tenant_id");
     System.out.println(addressObj.fetch()); 
}

しかし、この行でヌルポインタ例外が発生しています

DBCursor cursor = coll.find(query,field);

mongodb javaのフィールドを制限するには?

4

1 に答える 1

1

おそらくあなたのエラーはこのコードにあると思います:代わりにwhereMap.put("tennat_id", 1);言うべきです。tenant_id

それを除けば、あなたのコードは問題ないように見えます。

_id フィールドを取得したくない場合は、 のオブジェクトに別のオブジェクトを追加できfieldます_id:0_idフィールドを明示的に除外する必要があります。

BasicDBObject field=new BasicDBObject("name",1)
  .append("_id": 0);
于 2012-09-11T21:39:15.240 に答える