2017-01-31 3 views
0

두 개의 컬렉션이 있습니다 1) Floorplan_backup. 문서의 구조는 다음과 같습니다. -Mongodb 컬렉션의 문서를 다른 컬렉션의 필드 값으로 업데이트하는 방법

{ 
    "_id" : ObjectId("5877e18a88db272b578572bd"), 
    "floorplans" : [ 
     { 
      "name" : "Campus Center - Atrium", 
      "uuid" : NumberLong(3), 
      "cameras" : [] 
     }, 
     { 
      "name" : "Campus Center - Bridge ", 
      "uuid" : NumberLong(4), 
      "cameras" : [] 
     }, 
     { 
      "name" : "Campus Center - Top", 
      "uuid" : NumberLong(5), 
      "cameras" : [] 
     }, 
     { 
      "name" : "Performance Dining Hall", 
      "uuid" : NumberLong(6), 
      "cameras" : [] 
     }, 
     { 
      "name" : "Main Kitchen", 
      "uuid" : NumberLong(7), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Board of Trustees", 
      "uuid" : NumberLong(8), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Academic Affairs", 
      "uuid" : NumberLong(9), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Admissions", 
      "uuid" : NumberLong(10), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Athletics", 
      "uuid" : NumberLong(11), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Financial", 
      "uuid" : NumberLong(14), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - HR", 
      "uuid" : NumberLong(15), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Institutional", 
      "uuid" : NumberLong(16), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - IT", 
      "uuid" : NumberLong(17), 
      "cameras" : [] 
     }, 

     { 
      "name" : "OrgChart - Student Success", 
      "uuid" : NumberLong(20), 
      "cameras" : [] 
     }, 
     { 
      "name" : "OrgChart - Student Life", 
      "uuid" : NumberLong(21), 
      "cameras" : [] 
     } 
    ], 
    "userid" : "user-56cb3c4c0c953470865336", 
    "firstviewhost" : undefined 
} 

2) 평면도입니다. 문서

{ 
    "_id" : ObjectId("589025b03422cafc09913363"), 
    "userid" : "user-56cb3c4c0c953470865336", 
    "firstviewhost" : "dean.vizsafe.com" 
} 

의 구조는 둘 다 소장의 사용자 ID를 일치시켜 값 "dean.vizsafe.com"와 Floorpla_backup의 firstviewhost를 업데이트하고 싶습니다.

db.floorplan_backup.find().forEach(function (doc1) { 
    var doc2 = db.floorplan.find({ userid: doc1.userid }, { firstviewhost: 1 }); 
    if (doc2 != null) { 
     doc1.firstviewhost = doc2.firstviewhost; 
     db.floorplan_backup.save(doc1); 
    } 
}); 

그러나 나에게 원하는 결과 집합을 포기하지 않을입니다 - :

사용되는 자바 스크립트 코드입니다. 이게 뭐가 잘못되었는지 알려 주실 수 있습니까?

답변

0

find는 findOne 대신 커서를 반환합니다.

db.floorplan_backup.find().forEach(function (doc1) { 
    var doc2 = db.floorplan.findOne({ userid: doc1.userid }, { firstviewhost: 1 }); 
    if (doc2 != null) { 
     doc1.firstviewhost = doc2.firstviewhost; 
     db.floorplan_backup.save(doc1); 
    } 
}); 
+0

고맙습니다. 저에게 도움이되었습니다. – Webdev

1

doc2는 배열입니다. findOne을 사용하여 객체를 가져옵니다.

db.floorplan_backup.find().forEach(function (doc1) { 
    var doc2 = db.floorplan.findOne({ userid: doc1.userid }, { firstviewhost: 1 }); 
    if (doc2 != null) { 
     doc1.firstviewhost = doc2.firstviewhost; 
     db.floorplan_backup.save(doc1); 
    } 
}); 
관련 문제