[MONGODB] 배열에 배열에서 항목을 업데이트
MONGODB배열에 배열에서 항목을 업데이트
나는이 같은 MongoDB의 컬렉션에서 문서를 가지고 :
{
sessions : [
{
issues : [
{
id : "6e184c73-2926-46e9-a6fd-357b55986a28",
text : "some text"
},
{
id : "588f4547-3169-4c39-ab94-8c77a02a1774",
text : "other text"
}
]
}
]
}
그리고 첫 번째 세션의 ID 588f4547-3169-4c39-ab94-8c77a02a1774으로 문제를 업데이트 할.
문제는 내가 단지 그것이 첫 번째 세션 및 문제 아이디의 것을 알고 있다는 것입니다 (NOT 문제의 인덱스!)
나는 이런 식으로 뭔가를 시도 그래서 :
db.mycollection.update({ "sessions.0.issues.id" : "588f4547-3169-4c39-ab94-8c77a02a1774"},
{ $set: { "sessions.0.issues.$.text" : "a new text" }})
그러나 나는 다음과 같은 결과를 얻었다 :
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: sessions.0.issues.$.text"
}
이걸 어떻게 할 수 있습니까?
도와 줘서 고마워.
해결법
-
==============================
1.이 (분명히 상당) 쿼리를 사용해야합니다 :
이 (분명히 상당) 쿼리를 사용해야합니다 :
db.mycollection.update({"sessions.0.issues": {$elemMatch: {id: <yourValue>}}}, {$set: {"sessions.0.issues.$.text": "newText"}})
당신의 업데이트 표현이 정확 것을 알 수 있습니다.
$ elemMatch에 대한 자세한 정보를 제공합니다.
BTW, $ 연산자는 "중첩 된 배열을 통과 쿼리"일을하지 않는 것을 MongoDB를 참조 explicits.
중요 : $ elemMatch는 버전 4 이상에서 작동합니다.
from https://stackoverflow.com/questions/24166615/update-an-item-in-an-array-that-is-in-an-array by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 가장 좋은 방법은 Node.js를를 사용하여 MongoDB에 연결하려면 [중복] (0) | 2019.12.25 |
---|---|
[MONGODB] 어떻게 유성은 MongoDB를 즉시 변경 알 수 있을까? (0) | 2019.12.25 |
[MONGODB] 객체의 배열에 몽구스 / MongoDB를 $ addToSet 기능을 사용하여 (0) | 2019.12.24 |
[MONGODB] 증가하는 데이터 구조와 MongoDB의 성능 (0) | 2019.12.24 |
[MONGODB] 내가 / 내 편안하고 URL을에서 ObjectId가 사용하지 말아야 할 이유는 어떤 이유가있다 (0) | 2019.12.24 |