我从MongoDB开始,很抱歉,如果我的问题太基础了。 我在Mongo有一个具有以下结构的集合:
{
nome: "Diego", contas: [
{
banco: "itau",
tipo: "corrente",
investimentos: [{
tipo: "fundo",
transacoes: [{
numero: 1,
valor: 1000,
data: "24/06/2017"
},
{
numero: 2,
valor: 1500,
data: "01/02/2017"
}]
},
{
tipo: "poupanca",
transacoes: [{
numero: 1,
valor: 600,
data: "20/06/2017"
}]
}]
},
{
banco: "bradesco",
tipo: "poupanca",
investimentos: []
},
{
banco: "santander",
tipo: "juridica",
investimentos: [{
tipo: "pic",
transacoes: [{
numero: 1,
valor: 100,
data: "20/06/2017"
},
{
numero: 2,
valor: 100,
data: "20/05/2017"
},
{
numero: 3,
valor: 100,
data: "20/05/2017"
}]
}]
}]
}
我希望过滤investimentos
conta
数组,以仅包含字段tipo
等于fundo
的条目。
有我的疑问:
db.teste.aggregate([
{
$project: {
nome: 1,
"contas.investimentos": {
$filter: {
input: "$contas.investimentos",
as: "investimento",
cond: { $eq: ["$$investimento.tipo", "fundo"]}
}
}
}
}]);
结果是:
{
"_id" : ObjectId("59563cf574f77220ff2166ea"),
"nome" : "Diego",
"contas" : [
{
"investimentos" : []
},
{
"investimentos" : []
},
{
"investimentos" : []
}
]
}
我无法理解为什么结果为null
字段investimentos
。
我认为iam处理子阵列的方式有问题,但我无法找到差距在哪里。
请有人帮帮我吗?
答案 0 :(得分:1)
您必须使用contas
来映射$filter
值并转到investimentos
db.teste.aggregate([{
$project: {
nome: 1,
contas: {
$map: {
input: "$contas",
as: "contas",
in: {
banco: "$$contas.banco",
tipo: "$$contas.tipo",
investimentos: {
$filter: {
input: "$$contas.investimentos",
as: "investimento",
cond: {
$eq: ["$$investimento.tipo", "fundo"]
}
}
}
}
}
}
}
}]);
。
像
这样的东西object.issue.filter(cf_20 = value)