我在我的mongodb上找到了一个,我也可以在pymongo做到这一点。
db.myTest.find({“cell”:“k12p125”})
{“_ id”:ObjectId(“5425194479df354955015855”),“cell”:“k12p125”,
“fileInfo”:{“t50%”:95,“fName”:“file1”,“25%”:67,“min”:0,“50%”:70,“std”:23.155629597455047,“max”: 204,“75%”:93,“count”:42484,“mean”:78.01871292721965}}{“_ id”:ObjectId(“5425197d79df3549550161e9”),“cell”:“k12p125”,“fileInfo”:{“t50%”:92,“fName”:“file2”,“25%”:69, “min”:0,“50%”:71,“std”:21.696940348452337,“max”:204,“75%”:90,“count”:42484,“mean”:78.14659636569061}}
{“_ id”:ObjectId(“542519b679df354955016b7d”),“cell”:“k12p125”,“fileInfo”:{“t50%”:95,“fName”:“file3”,“25%”:66, “min”:0,“50%”:70,“std”:23.58083230514195,“max”:205,“75%”:94,“count”:42484,“mean”:77.98015723566519}}
我想要做的是访问嵌入式文档。所以我有一个名为“cell”的键,我正在寻找“k12p125”的值。我想要做的是查找单元格k12p125然后拉出每个文件的所有“std”键以及每个文件的名称。所以我想要的信息是
细胞:k12p125
FNAME: “文件1”,性病:23.155629597455047
FNAME: “文件2”,标准:21.696940348452337
fName:“file3”,std:23.58083230514195
并且能够使用pymongo检索该信息。我还想知道,只要文件被排序,是否有办法直接获取每个文件的“标准”。我想要
细胞:k12p125
STD:23.155629597455047
STD:21.696940348452337
std:23.58083230514195
出来的std将按文件的排序顺序排列(std顺序为file1,file2,file3)。如果您需要更多说明,请告诉我。我很难概念化如何访问嵌入式文档,因此任何帮助都会很棒。 谢谢!
答案 0 :(得分:0)
您无法通过基本查询获得所需的输出,但您可以通过简单的投影和排序来完成:
db.foo.find({"cell" : "k12p125"}, {cell : 1, "fileInfo.fName" : 1, "fileInfo.std" : 1, _id : 0}).sort({ "fileInfo.fName" : 1})
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file1", "std" : 23.155629597455047 } }
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file2", "std" : 21.696940348452337 } }
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file3", "std" : 23.58083230514195 } }
或者,对于逆序:
db.foo.find({"cell" : "k12p125"}, {cell : 1, "fileInfo.fName" : 1, "fileInfo.std" : 1, _id : 0}).sort({ "fileInfo.fName" : -1})
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file3", "std" : 23.58083230514195 } }
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file2", "std" : 21.696940348452337 } }
{ "cell" : "k12p125", "fileInfo" : { "fName" : "file1", "std" : 23.155629597455047 } }
您仍然需要处理fileInfo
的顶级文档,但通常很容易与客户端打交道。
然后,对于返回std,类似地,即使您没有投射排序字段,仍然可以应用排序:
db.foo.find({"cell" : "k12p125"}, {cell : 1, "fileInfo.std" : 1, _id : 0}).sort({ "fileInfo.fName" : -1})
{ "cell" : "k12p125", "fileInfo" : { "std" : 23.58083230514195 } }
{ "cell" : "k12p125", "fileInfo" : { "std" : 21.696940348452337 } }
{ "cell" : "k12p125", "fileInfo" : { "std" : 23.155629597455047 } }
db.foo.find({"cell" : "k12p125"}, {cell : 1, "fileInfo.std" : 1, _id : 0}).sort({ "fileInfo.fName" : 1})
{ "cell" : "k12p125", "fileInfo" : { "std" : 23.155629597455047 } }
{ "cell" : "k12p125", "fileInfo" : { "std" : 21.696940348452337 } }
{ "cell" : "k12p125", "fileInfo" : { "std" : 23.58083230514195 } }
您需要确定查询模式的位置,以便进行适当的索引。 compound index cell
作为最左边的元素,嵌入字段的组合可能就是您所需要的,但看起来完全取决于您最终构建查询的方式。 / p>