2013-03-12 1 views
0

모든 항목을 가져 와서 즐겨 찾기 목록에 표시하고 싶습니다.MongoDB 모든 상품 가져 오기 및 즐겨 찾기 표시

{ 
    "user": { 
     "favorites": [2] 
    } 
} 

이 :

Supose 내가 이것을 가지고

{ 
    "item": { 
     "_id"= "1", 
     "value": "myval" 
    } 
} 

{ 
    "item": { 
     "_id"= "2", 
     "value": "myval" 
    } 
} 

... // Rest of documents 

나는이

{ 
    "item": { 
     "_id"= "1", 
     "value": "myval" 
    } 
} 

{ 
    "item": { 
     "_id"= "2", 
     "value": "myval", 
     "isFavorite": "yes" // I just want to mark my favorites somehow. 
    } 
} 

... // Rest of documents 

어떻게하여 MongoDB에이를 것입니다 싶어?

+0

JSON/BSON 구문은 약간 꺼져 있지만 mongoDB에서이를 자동으로 수행 할 방법이 없습니다. 한 사용자 문서에서 목록을 가져 와서 각 항목을 개별적으로 업데이트하려면 코드를 작성해야합니다. 작성해야 할 대부분의 드라이버에는 몇 줄의 코드가 있습니다. – WiredPrairie

답변

0

각 항목은 항목 ID이다 작품의 배열이 주어 사용자 - 예를 들면 : { 을 _id : 112,233 "사용자"{ "즐겨 찾기"[2,7,13] } }

당신은 마음에 드는 배열을 얻었을 것

는 [2,7,13]

이 그런 다음 항목에 수집을 업데이트를 구성

0 (사용자 ID 112233이 추정)

예를 들어, 항목이 다소 중첩되어 있습니다. 실제 있는지 여부는 확실하지 않습니다. 당신의 품목 기록이

{ _id:999,item:{_id:1,value:"myValue"}} 

하고 당신이 정말로 "item._id"년대 항목을 업데이트하는 것을 의미하는 경우

1 (오히려 필수 문서보다 더 _id 999) 다음 것

db.items.update({"item._id": {$in:[2,7,13]}}, {$set:{"item.isFavorite":true}},{ multi: true }) 
입니다

@WiredPrairie에 의해 언급 되었 듯이, 그것은 특이한 문서 구조입니다. 사용자는 _id를 첫 번째 클래스 필드로 가질 것으로 예상 할 수 있습니다. 모든 레코드에는 하나의 필드가 있습니다.

항목 컬렉션에 all이 공유하는 항목이 포함되어 있다고 가정하면 모든 사람이 좋아하는 항목이 아니기 때문에 항목에 'isFavorite'를 저장하고 싶지 않을 것입니다. 모델링하는 또 다른 방법은 각 항목에 fav'd 사용자의 ID를 포함하는 배열을 추가하는 것입니다. $ addToSet를 사용

뭔가

같은
>db.items.update({"_id": {$in:[2,7,13]}},{$addToSet:{"favoredByUserIds": "user1"}},{ multi: true }) 
// yeilding 'user1' in the favored by array 
> db.items.find() 
{ "_id" : 1, "value" : "myVal" } 
{ "_id" : 3, "value" : "myVal" } 
{ "_id" : 4, "value" : "myVal" } 
{ "_id" : 2, "favoredByUserIds" : [ "user1" ], "value" : "myVal" } 

는 동작을 반복 할 수 있도록하지만, "USER1은"한 번만 추가됩니다.

관련 문제