Mongodb 嵌入式文档中的查询
我想做一个查询,在那里我可以找到所有银行,银行是banco1,投资不等于“box” 我该怎么做?我尝试了此查询,但不起作用: find({“投资”:{$elemMatch:{bank:'banco1',productName:{$ne:'box}}}) 这个查询是我尝试过的许多查询之一 谢谢Mongodb 嵌入式文档中的查询,mongodb,pymongo,Mongodb,Pymongo,我想做一个查询,在那里我可以找到所有银行,银行是banco1,投资不等于“box” 我该怎么做?我尝试了此查询,但不起作用: find({“投资”:{$elemMatch:{bank:'banco1',productName:{$ne:'box}}}) 这个查询是我尝试过的许多查询之一 谢谢 { “_id”:“5d3fc8c3914297c7b9a3a9e5”, “banco”:“banco 1”, “投资”:[{ “银行”:“银行1”, “风险”:“保护者”, “到期日”:“2021-10
{
“_id”:“5d3fc8c3914297c7b9a3a9e5”,
“banco”:“banco 1”,
“投资”:[{
“银行”:“银行1”,
“风险”:“保护者”,
“到期日”:“2021-10-04”,
“税”:“1.02”,
“鉴别器”:“投资”,
“产品名称”:“LCI”
},
{
“银行”:“银行1”,
“风险”:“保护者”,
“到期日”:“2020-06-24”,
“税”:“0.75”,
“鉴别器”:“投资”,
“产品名称”:“Fundo DI”
},
{
“银行”:“银行1”,
“风险”:“保护者”,
“税”:“0.04”,
“鉴别器”:“投资”,
“id”:“259ad8ac-57b7-4d33-8e75-46CF5C28E3”,
“周年纪念”:“30”,
“产品名称”:“盒子”
}
}],
{
“_id”:“5d3fcb4c914297c7b9a3a9e6”,
“banco”:“banco2”,
“投资”:[{
“银行”:“banco2”,
“风险”:“保护者”,
“到期日”:“2020-06-24”,
“税”:“0.80”,
“鉴别器”:“投资”,
“id”:“73db503f-c780-448c-a6a8-05d2837ff6ff”,
“赎回日期”:“D+1”,
“产品名称”:“Fundo DI”
}
,
{
“银行”:“banco2”,
“风险”:“保护者”,
“到期日”:“2020-12-17”,
“税”:“0.98”,
“鉴别器”:“投资”,
“id”:“54e01515-dc7f-470f-8f00-8603c8f00686”,
“产品名称”:“LCA”
},
{
“银行”:“banco2”,
“风险”:“保护者”,
“到期日”:“2021-08-05”,
“税”:“1.0”,
“鉴别器”:“投资”,
“id”:“259ad8ac-57b7-4d33-8e75-46CF5C28E2”,
“产品名称”:“CDB”
}
}]
欢迎来到苏銮
我发现这给了我find中所有可用的功能,以及更多的功能。因此,大约95%的时候,除非我做一个快速查询,否则我最终会去聚合
以下汇总将为您提供所需信息:
db.getCollection('Test').aggregate([
{ $unwind: "$investimentos"},
{ $match: {
'investimentos.bank': "banco1",
'investimentos.productName': /^(?!box$)/
}},
])
管道接收InvestmentOS中嵌入的文档数组,并创建一个新文档,为InvestmentOS中的每个元素保留父字段(_id和banco)。您可以尝试使用db.getCollection('Test').aggregate([{$unwind:$investmentos”}])
直观地查看发生了什么
管道与find方法的作用相同——您给它一个要应用的过滤器列表。第二个元素使用正则表达式(由“/”字符包围)指定它应该查找所有不以“box”开头的内容。欢迎使用SO Luan
我发现这给了我find中所有可用的功能,以及更多的功能。因此,大约95%的时候,除非我做一个快速查询,否则我最终会去聚合
以下汇总将为您提供所需信息:
db.getCollection('Test').aggregate([
{ $unwind: "$investimentos"},
{ $match: {
'investimentos.bank': "banco1",
'investimentos.productName': /^(?!box$)/
}},
])
管道接收InvestmentOS中嵌入的文档数组,并创建一个新文档,为InvestmentOS中的每个元素保留父字段(_id和banco)。您可以尝试使用db.getCollection('Test').aggregate([{$unwind:$investmentos”}])
直观地查看发生了什么
管道执行与find方法相同的操作-您给它一个要应用的过滤器列表。第二个元素使用正则表达式(由“/”字符包围)指定它应该查找所有不以“box”开头的内容“如果需要将这些单独的文档重新组合到原始分组中,则在聚合中的$match管道之后添加$group管道:
{$group:{{u id:'$\u id',banco:{$first:'$banco'},investmentos:{$push:'$investmentos'}”
如果您需要将这些单独的文档重新组合到其原始分组中,那么在聚合中的$match管道之后添加$group管道:{$group:{{u id:'$\u id',banco:{$first:'$banco'},investmentos:{$push:'$investmentos'}}
您有机会尝试建议的解决方案吗?你得到你需要的答案了吗?如果是,请标记答案或提供建议反馈,以便在需要时提供更多信息。您是否有机会尝试建议的解决方案?你得到你需要的答案了吗?如果是,请标记答案或提供对提案的反馈,以便在需要时提供更多信息。