如何使用mongo查询打印嵌套数组

时间:2018-12-20 19:18:48

标签: mongodb mongodb-query

我正在尝试打印嵌套数组的值,但是却出现执行脚本错误,如何打印对象BSON并避免嵌套数组出现错误。 注意:我想使用print而不是find()。

客户架构

 {
 "name" : "Sam",   
 "phone" : [ 
 {
   "home" : "123456",
  "work" : "045842"
 }]}

查询

db.getCollection('customer').find({}).forEach( function(cust) 
{
print("Customer Name : " + cust.name); // prints Sam
print("Home Contact : " + cust.phone) // prints [object BSON]
print("Home Contact : " + cust.phone.home) // throws error
});

2 个答案:

答案 0 :(得分:1)

您只需要将对象转换为字符串并访问数组;

   print("Home Contact : " + JSON.stringify(cust.phone[0])) 
    // prints ` Home Contact: { "home" : "123456", "work" : "045842" }
   print("Home Contact : " + cust.phone[0].home) // "123456"

一个例子:

aireclaimRs:PRIMARY> use test
switched to db test
aireclaimRs:PRIMARY> db.createCollection('customer')
{ "ok" : 1 }
aireclaimRs:PRIMARY> db.customer.insert( {
...  "name" : "Sam",   
...  "phone" : [ 
...  {
...    "home" : "123456",
...   "work" : "045842"
...  }]})
WriteResult({ "nInserted" : 1 })
aireclaimRs:PRIMARY> db.getCollection('customer').find().forEach(function(cust){
... print("Customer Name : " + cust.name);
... print("Homes Contact : " + JSON.stringify(cust.phone[0]));
... print("Home Contact : " + cust.phone[0].home)
... })
Customer Name : Sam
Homes Contact : {"home":"123456","work":"045842"}
Home Contact : 123456

答案 1 :(得分:1)

如果数组中有多个项目,则可以使用聚合

 db.collectionName.aggregate([

    { $unwind: { path: "$phone", preserveNullAndEmptyArrays: true}},

 ]).forEach(function(doc){

    print(doc.name)
    if(doc.phone !== undefined) print(doc.phone.home)
    if(doc.phone !== undefined) print(doc.phone.work)
 })