mongodb "$" 操作符问题
天蓬老师
天蓬老师 2017-04-21 11:16:52
0
2
644

测试数据:

{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : 
"ABC", 
  "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
"votes" : 7 } ] } 

执行更新语句:

语句一:

db.mydb.update({title:"ABC"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行报错:Cannot apply the positional operator without a corresponding query field containing an array.

语句二:

db.mydb.update({"comments.by":"joe"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行结果正常

请问是怎么回事?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(2)
PHPzhong

으아악

여기 댓글은 배열입니다(오류 메시지 참조). 업데이트하려면 순회해야 합니다.

Ty80

위에서 말씀하신 내용이 맞습니다. 주석은 배열이지만 순회할 필요는 없습니다. 포스터에 사용된 "$"가 해결책입니다. 단지 잘못 사용했을 뿐입니다. $가 무엇을 의미하는지 살펴보겠습니다.

업데이트의 처음 두 매개변수인 <쿼리 조건>과 <업데이트 작업>에서 <쿼리 조건>에서 쿼리하는 콘텐츠가 배열의 콘텐츠인 경우 <업데이트 작업> "$"는 이전 쿼리에서 일치하는 요소를 참조합니다.

두 번째 예는 배열을 쿼리하는 것입니다. 첫 번째 예에서는 title="ABC"의 문서를 찾았지만 여기의 쿼리 조건에는 배열이 포함되어 있지 않습니다. 실제로 두 예의 쿼리 조건을 함께 작성하여 title="..."을 쿼리하면 Joe가 있는 문서를 가질 수 있습니다. 메시지를 남긴 후 찾은 조의 메시지에 +1을 추가하세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿