我的收集文件如下:
{ "_id" : 1, "path" : [ 3, 1 ], "name" : "A" }
{ "_id" : 2, "path" : [ 3, 1, 1 ], "name" : "B" }
{ "_id" : 3, "path" : [ 3, 1, 1, 1 ], "name" : "C" }
{ "_id" : 4, "path" : [ 3, 1, 2 ], "name" : "D" }
{ "_id" : 5, "path" : [ 3, 1, 2, 1 ], "name" : "E" }
{ "_id" : 6, "path" : [ 3, 1, 3 ], "name" : "F" }
{ "_id" : 7, "path" : [ 3, 2 ], "name" : "G" }
{ "_id" : 8, "path" : [ 3, 2,1 ], "name" : "H" }
现在我正在尝试查询所有路径以3,1:
开头db.exp3.find({"path": {"$elemMatch": {"0": 3}}});
不能正常工作。
任何提示?
答案 0 :(得分:6)
您可以按如下方式查询:
db.myObject.find({"path.0" : 3, "path.1" : 1})
答案 1 :(得分:2)
或者,如果您可以将路径存储为字符串,那么您可以将其编入索引并以查询开头,您可以使用锚定查询使其使用索引。 例如
db.so.insert({ "_id" : 1, "path" : "3/1", "name" : "A" })
db.so.insert({ "_id" : 2, "path" : "3/1/1", "name" : "B" })
....
db.so.ensureIndex({path:1})
db.so.find({path:/^3\/1/})