我的收藏集中的文档具有一个嵌入的子文档数组“ tvals”,其中包含一组布尔标志以及一个ObjectIds数组“ elIds”,如下所示。
我很难编写适当的查询来对文档集合执行许多操作。
JSON中的示例 文档一-数组中具有布尔字段“ man” = true的一个或多个子文档
{ “ _id”:ObjectId(“ 5c7975b059d4e2533493a404”),
"dpID" : ObjectId("5c7970d759d4e2533493a3ee"),
"elIds" : [
ObjectId("5c79709f59d4e253349373c7"),
ObjectId("5c79709f59d4e253349373d4"),
ObjectId("5c7970ac59d4e25334938e31")
],
"Acct" : "5c7970a659d4e25334937b67",
"tvals" : [
{
"tid" : ObjectId("5c7970a259d4e253349377da"),
"val" : 10.0,
"calc" : true,
"lock" : false,
"man" : false,
"imp" : false,
"agg" : false
},
{
"tid" : ObjectId("5c7970a259d4e253349377db"),
"val" : 10.0,
"calc" : true,
"lock" : false,
"man" : true,
"imp" : false,
"agg" : false
},
{
"tid" : ObjectId("5c7970a259d4e253349377dc"),
"val" : 10.0,
"calc" : true,
"lock" : true,
"man" : true,
"imp" : false,
"agg" : true
}
],
"_class" : "tpdata"
}
文档二-子文档具有布尔字段“ imp” = true和“ agg” = false { “ _id”:ObjectId(“ 5c7975b059d4e2533493a40a”),
"dpID" : ObjectId("5c7970d759d4e2533493a3ee"),
"elIds" : [
ObjectId("5c79709f59d4e253349373c7"),
ObjectId("5c79709f59d4e253349373d4"),
ObjectId("5c7970ac59d4e25334938e31")
],
"Acct" : "5c7970a659d4e25334937b67",
"tvals" : [
{
"tid" : ObjectId("5c7970a259d4e253349377da"),
"val" : 10.0,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : true,
"agg" : false
},
{
"tid" : ObjectId("5c7970a259d4e253349377db"),
"val" : 10.0,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : true,
"agg" : false
},
{
"tid" : ObjectId("5c7970a259d4e253349377dc"),
"val" : 10.0,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : true,
"agg" : false
}
],
"_class" : "tpdata"
}
文档三-带有布尔字段“ agg” = true的子文档
{ “ _id”:ObjectId(“ 5c75b6545486e48de8520814”),
"dpID" : ObjectId("5c75b4dc5486e48de8520635"),
"elIds" : [
ObjectId("5c75b4675486e48de851d5c3"),
ObjectId("5c75b4675486e48de851d5ce"),
ObjectId("5c75b48d5486e48de851f02d")
],
"Acct" : "5c75b4745486e48de851dd77",
"tvals" : [
{
"tid" : ObjectId("5c75b46e5486e48de851d9af"),
"val" : 504.3,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : false,
"agg" : true
},
{
"tid" : ObjectId("5c75b46e5486e48de851d9b0"),
"val" : 84.29000000000002,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : false,
"agg" : true
},
{
"tid" : ObjectId("5c75b46e5486e48de851d9b1"),
"val" : 41.40999999999997,
"calc" : false,
"lock" : false,
"man" : false,
"imp" : false,
"agg" : true
}
],
"_class" : "tpdata"
}
我想帮助在Java代码中构建这3个查询,以供使用或与MongoTemplate一起应用以执行操作
在“ tvals”数组中查找并删除集合中所有没有子文档的文档,其中“ lock”标志= true或“ man”标志= true或“ agg”标志为true,并且“给定文档的特定“ dpID” ObjectId值,“ calc”标志为false。
从“ tvals”数组中具有一个或多个子文档的任何文档中查找和删除“ tvals”数组中的子文档,这些子文档具有“ man”布尔标志= false或“ lock”标志= false并带有给定一组“ dpID” ObjectId值。在这里,我们要保留对“锁”或“人”具有真实值的子文档。我怀疑这将是使用$ pull
查找和删除集合中所有在“ tvals”数组中没有子文档的文档,其中{{lock} flag = true或“ man” flag = true}或{“ agg” flag为给定特定的“ dpID” ObjectId值,并给定文档的一组特定的“ elIds”值,则返回true和“ calc”标志为false。 “ elIds”是ObjectIds的数组
我正在寻找带有任何基本解释的查询示例代码(Java和/或Javascript),将不胜感激。
谢谢。