각 특정 필드를 수동으로 설정할 필요없이 mongoose를 사용하여 임베디드 문서를 쉽게 업데이트 할 수있는 방법을 찾고 있습니다. 허용되는 답변 this question을 살펴보면 업데이트 할 임베디드 문서를 찾으면 실제로 각 속성을 설정 한 다음 부모를 저장해야합니다. 내가 원하는 것은 업데이트 객체를 전달하고 MongoDB가 업데이트를 설정하도록하는 것입니다.임베디드 문서 업데이트 mongoose
예컨대 나는 일반 (비 포함) 문서를 업데이트하는 경우 내가 이런 짓을 했을까 : 여기
models.User.findOneAndUpdate({_id: req.params.userId}, req.body.user, function(err, user) {
err ? resp.status(500).send(err) : user ? resp.send(user) : resp.status(404).send();
});
는 사실 req.body.user의 각 속성을 통해 이동하고 변경 사항을 설정할 필요가 없습니다. 하위 문서에서도 이런 종류의 일을 할 수있는 방법을 찾을 수 없습니까?
var UserSchema = BaseUserSchema.extend({
isActivated: { type: Boolean, required: true },
files: [FileSchema]
});
var FileSchema = new mongoose.Schema(
name: { type: String, required: true },
size: { type: Number, required: true },
type: { type: String, required: true },
});
을 내가 사용자와 파일 ID를 기반으로 파일을 업데이트하기 위해 노력하고있어 다음과 같이
내 스키마입니다.
값을 설정하는 도우미 함수를 만들어야합니까, 아니면 이것을 수행하는 MongoDB 방법이 있습니까?
감사합니다. 정말
var user = { /* The user information, at least the _id */
var filedata = { /* From somewhere with _id, name, size, type */ };
models.User.findOneAndUdate(
{ "_id": user._id, "files._id": filedata._id },
{
"$set": {
"name": filedata.name,
"size": filedata.size,
"type": filedata.type
}
},
function(err,user) {
// Whatever in here, but the update is already done.
}
);
또는 :
안녕하세요. 답변 해주셔서 감사합니다. 아마 내 질문에 내가 분명하지 않은 것 같아. 업데이트 내에서 각 값을 개별적으로 설정할 수 있음을 이해합니다. 하지만 내가하고 싶은 것은 삽입 된 파일 문서에 대한 업데이트가 포함 된 객체를 전달하는 것입니다. 예를 들어 HTTP put 요청을 만들 때 유용합니다. 여기서 사용자가 어떤 업데이트를하고 싶은지 알 수 없습니다. 저장하기 전에 속성을 설정하는 도우미 함수를 작성하지 않고 mongoose/mongodb에서이 작업을 수행 할 수 있습니까? 다시 한번 감사드립니다. – Sherlock
@Sherlock 당신 말이 맞아요, 당신의 질문은 분명하지 않고 그 주석도 아닙니다. 아마도 정확히 무엇을하고 싶은지에 대한 명확한 시연으로 질문을 업데이트해야합니다. 하지만 업데이트 부분에 **'$ set' ** 또는 **'$ push' ** 형식의 구문을 사용하지 않는 한 전체 배열을 바꾸는 것 외에는 다른 작업을 수행 할 수 없습니다. –
제 질문에 대한 답변입니다. 감사. – Sherlock