我有一个集合,其中包含具有嵌套数组形式的数据的文档,其中包含不同格式的数组列表.
输入:
{
"_id" : ObjectId("5262d2eaca24d995f4958083"),
"array" : [
{
"name" : "sam",
"roll" : 21
},
{
"name" : "vam",
"roll" : 22
},
{
"name" : "mam",
"roll" : 23
},
{
"name" : "jam",
"roll" : [31, 32, 33, 34]
},
{
"name" : [
{"name" : "lam" },
{"name" : "ham" },
{"name" : "pam" }
],
"roll" :[
{"roll" : 41},
{"roll" : 42},
{"roll" : 43}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
(在上面的代码中,数组[4]与其前辈相比具有不同的格式)
我想获得数组[4]的所有名称,即lam,ham,pam
期望的输出:
林
火腿
帕姆
我的方法:我尝试了以下代码
db.test1.find().forEach(function(x)
{
x.array.forEach(function(y)
{
y.name.forEach(function(z)
{
print(z.name);
})
})
})
Run Code Online (Sandbox Code Playgroud)
但这给出了错误原因:
错误:Sam没有'forEach'方法:
因为它试图循环遍历name(arraylist 1),但由于它只有一个数据,即'sam',forEach不适用于此,因为forEach仅适用于关联数组.
仅供参考:当我为嵌套数组尝试相同的代码时,其列表的数组格式相同,我可以获得所需的输出.
请帮我使用mongo shell获取正确的代码.
提前致谢:)
小智 15
您需要检查是否y.name是数组,然后尝试打印值.这样的事情应该有效:
db.test1.find().forEach(function (x) {
x.array.forEach(function (y) {
if (y.name instanceof Array) {
y.name.forEach(function (z) {
print(z.name);
});
}
});
});
Run Code Online (Sandbox Code Playgroud)