0

私はMongoにこのような木を持っています:

> db.data.find()
{ "_id" : "07c", "path" : null }
{ "_id" : "a", "path" : "07c,a" }
{ "_id" : "b", "data" : "{\"c\":\"olaC\",\"d\":\"olaD\"}", "path" : "07c,a,b" }
{ "_id" : "c", "c" : "{\"c\":\"olaC\",\"d\":\"olaD\"}", "path" : "07c,a,b,c" }
{ "_id" : "d", "d" : "{\"d\":\"olaD\"}", "data" : "{\"c\":\"olaC\",\"d\":\"olaD\"}", "path" : "07c,a,b,c,d" }

b のすべての子孫を取得したいと思います。

MongoDB コンソールでこれを行うと、子孫が正常に取得されます。

> db.data.find({ path: /,b,/ } )
{ "_id" : "c", "c" : "{\"c\":\"olaC\",\"d\":\"olaD\"}", "path" : "07c,a,b,c" }
{ "_id" : "d", "d" : "{\"d\":\"olaD\"}", "data" : "{\"c\":\"olaC\",\"d\":\"olaD\"}",     "path" : "07c,a,b,c,d" }

しかし、Javaでこれを行うと:

BasicDBObject query = new BasicDBObject();
query.put("path", "/,"+array[i]+",/");
DBCursor cursor = coll.find(query);
while(cursor.hasNext()){
   System.out.println(cursor.next().toString());
}

デバッガからのクエリには次のものが含まれます: { "path" : "/,b,/"}

子孫がまったく得られません...なぜこれが機能しないのですか?

http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-materialized-paths/

4

1 に答える 1

1

/../ は、MongoDB シェルでは特別です。これは単なる正規表現を含む文字列ではなく、シェルによって解析され、正規表現として使用されるものです。

Java からこれを行うには、次のようにします。

BasicDBObject query = new BasicDBObject();
query.put("name", Pattern.compile(","+array[i]+","));
DBCursor cursor = coll.find(query);
while(cursor.hasNext()){
   System.out.println(cursor.next().toString());
}

参照: java api を使用して "like" で mongodb にクエリを実行する方法は?

于 2013-06-23T09:13:03.497 に答える