【发布时间】:2013-06-22 20:28:24
【问题描述】:
我在 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/
【问题讨论】:
-
试试这个:query.put("path", Pattern.compile("/,"+array[i]+",/"));