Как напечатать вложенный массив, используя запрос Монго - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь напечатать значения вложенного массива. Но получаю ошибку сценария выполнения. Как распечатать объект BSON и избежать ошибки для вложенного массива.Примечание: я хочу сделать с печатью, а не найти ().

Схема клиента

 {
 "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 голосов
/ 21 декабря 2018

Вы можете использовать агрегацию, если в массиве несколько элементов

 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)
 })
0 голосов
/ 20 декабря 2018

Вам просто нужно преобразовать объект в строку и получить доступ к массиву;

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...