2017-12-19 19 views
0

은 내가 MongoDB의 컬렉션에서 다음과 같은 데이터가 users라는 이름이 있습니다

{ 
    "_id" : ObjectID("5a3903562cdc59fad5fdc098"), 
    "name" : "Ana", 
    "hobbies" : [ 
     { 
      "title" : "kissing", 
      "with" : "pets" 
     }, 
     { 
      "title" : "playing", 
      "with" : "pets" 
     }, 
     { 
      "title" : "sleeping", 
      "with" : "pets" 
     } 
    ] 
} 
{ 
    "_id" : ObjectID("5a3903a32cdc59fad5fdc099"), 
    "name" : "Bart", 
    "hobbies" : [ 
     { 
      "title" : "hitting", 
      "with" : "pets" 
     }, 
     { 
      "title" : "beating", 
      "with" : "pets" 
     }, 
     { 
      "title" : "eating", 
      "with" : "pets" 
     } 
    ] 
} 

내가 레고 같은 새 값으로 애완 동물에게 모든 with 값을 교체해야합니다. 다음

하여 MongoDB의 documentation 버전 3.6 상태 다음 with 키의 각으로

The $[] operator can be used for queries which traverse more than one array and nested arrays.

내가해야 할 일을 수행한다 $[]를 사용하여, 두 개의 분리 된 배열의 내부에 살고있다. 그리고 맥에서 완벽하게 작동하지만 Windows 시스템에서,이 오류가 얻을 :

cannot use the part (hobbies of hobbies.$[].with) to traverse the element 

두 시스템은 MongoDB의 쉘 버전 3.6.0을 실행합니다. Mac 용 운영 체제는 macOS Sierra 10.12.6이고 Windows 용 Windows 10은 Windows 10입니다.

SO는 위치 연산자와 내가 특별히 얻는 오류와 관련된 많은 질문을 가지고 있습니다. 그러나 동일한 컬렉션에서 실행 된 동일한 작업이 Windows에서는 실패하지만 Mac에서는 성공한 이유가 없습니다.

필요한 결과를 얻으려는 다음 두 명령을 시도했습니다. 둘 다 Mac에서 작동하며 위의 동일한 오류로 Windows에서 모두 실패합니다.

db.users.updateMany({}, {$set: {"hobbies.$[].with": "legos"}}); 

db.users.update({}, {$set: {"hobbies.$[].with": "legos"}}, {multi: true}); 

당신은 차이 here의 화면 녹화를 볼 수 있습니다. Windows 컴퓨터에서의 녹음 텍스트가 더 작은쪽에 있다는 것을 미리 사과드립니다.

Windows에서이 문제를 해결하는 방법에 대한 도움이 있으면 대단히 감사하겠습니다.

+1

두 운영 체제에서 db.version()을 실행할 수 있습니까? 그냥 서버 버전을 확인하는 것도 마찬가지입니다. – Veeram

+0

@Veeram,'db.version()'은 두 머신에서 ** 3.6.0 **을 반환합니다. –

+0

다른 시스템에서 연결 한 것과 동일한 데이터베이스인지 확인하십시오. 오류는 적어도 취미가 없거나 배열이 아닌 취미를 가진 문서가 적어도 하나 있다는 오류입니다. 'db.users.updateMany ({hobbies : {$ type : "array"}}, {$ set : { "hobbies. $ [].": "legos"}})를 시도해보십시오. " –

답변

0

대신에) 내가 말할 수 없지만 창에가 (당신이 가지고있는 쿼리처럼 보이는 {} 같은 문제가 너무 리눅스에 존재

+0

네, 텍스트가 너무 작기 때문에보기가 어렵지만'{}'이 아니라'()'입니다. 그래도 고마워. –

0

. 나는 우분투 16.04 사용하고

, 3.6.1

다음 MongoDB를들은 후 출력되는 $ []

을 실행
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 } 

PS : 나는 댓글을 추가 할 수있는 충분한 명성을하지 않습니다 따라서 여기에 게시하십시오.