mongodb-是否可以在查找查询中的$elemMatch投影后进行筛选?
我在一个名为“变体”的集合中有这样的文档:mongodb-是否可以在查找查询中的$elemMatch投影后进行筛选?,mongodb,Mongodb,我在一个名为“变体”的集合中有这样的文档: { "_id" : "An_FM000900_Var_10_100042505_100042505_G_A", "analysisId" : "FM000900", "chromosome" : 10, "start" : 100042505, "end" : 100042505, "size" : 1, "reference" : "G", "alternative" : "A",
{
"_id" : "An_FM000900_Var_10_100042505_100042505_G_A",
"analysisId" : "FM000900",
"chromosome" : 10,
"start" : 100042505,
"end" : 100042505,
"size" : 1,
"reference" : "G",
"alternative" : "A",
"effects" : [
{
"_id" : "Analysis:FM000900-Variant:An_FM000900_Var_10_100042505_100042505_G_A-Effect:0",
"biotype" : "protein_coding",
"impact" : "LOW",
},
{
"_id" : "Analysis:FM000900-Variant:An_FM000900_Var_10_100042505_100042505_G_A-Effect:1",
"biotype" : "protein_coding",
"impact" : "MODERATE",
}
]
}
我想在该集合中找到符合某些标准的文档(“analysisId”:“FM000900”),然后我想在“effects”数组字段上进行投影,以便在“effects”数组中只引入符合某些标准的第一个元素(“biotype”:“protein_coding”和“impact”:“mediate”)
问题是,我只想在“effects”数组中至少有一个元素满足条件的情况下显示主“variant”文档
通过下面的查询,我得到了预期的结果,但得到的“variant”文档的“effects”数组字段为空
db.getCollection('variants').find(
{
"analysisId":"FM000900"
}
,
{
"effects":{
"$elemMatch" : {
"biotype" : "protein_coding",
"impact" : "MODERATE"
}
}
}
).skip(0).limit(200)
如果可能的话,是否有人可以将此查询转换为仅获取投影后“effect”数组中包含某些元素的“variant”文档
如果可能的话,可以不使用聚合框架,用另一种方式完成吗?因为该收藏有数百万份文档,必须执行
非常感谢,伙计们 只需在投影之外使用,它将过滤至少具有一个匹配所有条件的效果数组元素的变体。
因此,您的查询将是:
db.getCollection('variants').find(
{
"analysisId":"FM000900",
"effects":{
"$elemMatch" : {
"biotype" : "protein_coding",
"impact" : "MODERATE"
}
}
}
,
{
"effects":{
"$elemMatch" : {
"biotype" : "protein_coding",
"impact" : "MODERATE"
}
}
}
).skip(0).limit(200)
此外,包含查询和投影的方法可以提高阅读性能,但要小心使用,因为它会大大降低写作性能 只需在投影之外使用,它将过滤至少具有一个匹配所有条件的效果数组元素的变体。
因此,您的查询将是:
db.getCollection('variants').find(
{
"analysisId":"FM000900",
"effects":{
"$elemMatch" : {
"biotype" : "protein_coding",
"impact" : "MODERATE"
}
}
}
,
{
"effects":{
"$elemMatch" : {
"biotype" : "protein_coding",
"impact" : "MODERATE"
}
}
}
).skip(0).limit(200)
此外,包含查询和投影的方法可以提高阅读性能,但要小心使用,因为它会大大降低写作性能