2013-01-16 4 views
6

내 문서에 클라이언트 ID의 배열이 포함될 것으로 예상되는 clients이라는 필드가 있습니다.몽구스에 ObjectId의 배열 채우기

{ 
    "first_name":"Nick", 
    "last_name":"Parsons", 
    "email":"[email protected]", 
    "password":"foo", 
    "clients":[ 
    "50f5e901545cf990c500000f", 
    "50f5e90b545cf990c5000010" 
    ] 
} 

내 데이터가 JSON으로 전송되며 직접 Mongo로 보내 문서를 만듭니다. 어떤 이유로 인해 내가 만들 때 clients이 채워지지 않으므로 수동으로 문자열로 입력해야합니다.

내 스키마는 매우 간단, 다음과 같이 정의 : 올바르게 내 이해에서

var userSchema = new Schema({ 
    first_name: { 
     type: String, 
     trim: true 
    }, 
    last_name: { 
     type: String, 
     trim: true 
    }, 
    email: { 
     type: String, 
     trim: true, 
     lowercase: true, 
     index: true, 
     unique: true, 
     required: true 
    }, 
    password: String, 
    clients: [Schema.Types.ObjectId] 
}); 

, 내가 정의한 클라이언트를. 하지만 내가 만들 때 클라이언트 배열을 채울 수 없습니다. 몽고로 전달 된 원시 개체가 좋아 보인다.

{ 
    first_name: 'Zack', 
    last_name: 'S', 
    email: '[email protected]', 
    password: 'test', 
    clients: [ 
     '50f5e901545cf990c500000f', 
     '50f5e90b545cf990c5000010' 
    ] 
} 

올바르게 입력했기 때문에 입력 한 내용에 특별한 것이 있습니까?

답변

2

허용 된 대답은 오래된 될 수 있습니다 ...

, 나는 $ 푸시 업데이트를 사용하는 것이 좋습니다 것입니다. 이 업데이트 방법은 수행중인 모든 작업이 컬렉션의 배열에 추가 될 때 업데이트를 수행하지 않도록 설계되었습니다.

http://docs.mongodb.org/manual/reference/operator/update/push/

+0

귀하의 추천 기법에 대한 몇 가지 예를 몽구스로 보여주십시오. –

+1

예제는 제공된 링크에서 찾을 수 있습니다. http://docs.mongodb.org/manual/reference/operator/update/push/#examples –

10

간단한 수정. 수신 배열이 채워 졌는지 확인 중입니다. 그렇다면 각각을 반복하고 변환 된 ObjectId 버전을 배열로 푸시합니다. 분명히 mongoose.Types.ObjectId('STRING');은 일반적인 문자열을 유효한 몽구스 ID로 변환 할 수 있습니다.

// if clients was passed with associated client ids 
if (data.clients.length > 0) { 

    _.map(data.clients, function(cid) { 

     // push client id (converted from string to mongo object id) into clients 
     user.clients.push(mongoose.Types.ObjectId(cid)); 

    }); 

} 

희망이 있으면 다른 사람에게 도움이됩니다. 당신이이 컬렉션을 업데이트 위하여려고하는 경우에

+1

user.clients의 내용을 복제하지 않습니까? –

+0

지도 함수에서'cid's'를 어떻게 채울 수 있습니까? –

+0

@PratikBothra 아니요, data.clients를 루핑하는 동안 user.clients로 푸시하기 때문입니다. –