Mongoose 문서를 json으로 변환
mongoose docs를 json으로 반환했습니다.
UserModel.find({}, function (err, users) {
return res.end(JSON.stringify(users));
}
단, 사용자.__syslog__도 반환되었습니다.그거 없이 어떻게 돌아와요?시도했지만 작동하지 않았습니다.
UserModel.find({}, function (err, users) {
return res.end(users.toJSON()); // has no method 'toJSON'
}
mongoosejs의 lian()을 사용해 볼 수도 있습니다.
UserModel.find().lean().exec(function (err, users) {
return res.end(JSON.stringify(users));
});
응답이 늦었지만 스키마를 정의할 때도 이 방법을 시도해 볼 수 있습니다.
/**
* toJSON implementation
*/
schema.options.toJSON = {
transform: function(doc, ret, options) {
ret.id = ret._id;
delete ret._id;
delete ret.__v;
return ret;
}
};
주의:ret
JSON의 객체이며 mongoose 모델의 인스턴스가 아닙니다.getter/setter 없이 오브젝트 해시에 바로 조작할 수 있습니다.
그 후:
Model
.findById(modelId)
.exec(function (dbErr, modelDoc){
if(dbErr) return handleErr(dbErr);
return res.send(modelDoc.toJSON(), 200);
});
편집 : 2015년 2월
누락된 toJSON(또는 toObject) 메서드에 대한 솔루션을 제공하지 않았기 때문에 사용 예시와 OP의 사용 예시의 차이를 설명하겠습니다.
OP:
UserModel
.find({}) // will get all users
.exec(function(err, users) {
// supposing that we don't have an error
// and we had users in our collection,
// the users variable here is an array
// of mongoose instances;
// wrong usage (from OP's example)
// return res.end(users.toJSON()); // has no method toJSON
// correct usage
// to apply the toJSON transformation on instances, you have to
// iterate through the users array
var transformedUsers = users.map(function(user) {
return user.toJSON();
});
// finish the request
res.end(transformedUsers);
});
예:
UserModel
.findById(someId) // will get a single user
.exec(function(err, user) {
// handle the error, if any
if(err) return handleError(err);
if(null !== user) {
// user might be null if no user matched
// the given id (someId)
// the toJSON method is available here,
// since the user variable here is a
// mongoose model instance
return res.end(user.toJSON());
}
});
일단 한번 해봐.toObject()
대신toJSON()
아마도요?
둘째, 어레이가 아닌 실제 문서에서 호출해야 하므로 다음과 같은 성가신 작업을 시도해 보십시오.
var flatUsers = users.map(function() {
return user.toObject();
})
return res.end(JSON.stringify(flatUsers));
추측이지만 그게 도움이 됐으면 좋겠어요.
model.find({Branch:branch},function (err, docs){
if (err) res.send(err)
res.send(JSON.parse(JSON.stringify(docs)))
});
나는 내가 실수를 했다는 것을 알았다.Object() 또는 ToJSON()을 호출할 필요가 없습니다.질문의 __proto_는 mongoose가 아닌 jquery에서 나왔습니다.테스트 결과는 다음과 같습니다.
UserModel.find({}, function (err, users) {
console.log(users.save); // { [Function] numAsyncPres: 0 }
var json = JSON.stringify(users);
users = users.map(function (user) {
return user.toObject();
}
console.log(user.save); // undefined
console.log(json == JSON.stringify(users)); // true
}
doc.toObject()는 문서에서 doc.protype을 삭제합니다.그러나 JSON.stringify(doc)에서는 차이가 없습니다.그리고 이 경우에는 필요하지 않습니다.
정답을 잘못 알고 있는 것 같지만, 만약 다른 방법을 찾는 사람이 있다면,Model.hydrate()
(mongoose v4 이후) javascript object(JSON)를 mongoose 문서로 변환합니다.
유용한 예는 다음과 같습니다.Model.aggregate(...)
.실제로 플레인 JS 오브젝트를 반환하고 있기 때문에 mongoose 문서로 변환하여 액세스 할 수 있습니다.Model.method
(예를 들어 스키마에 정의된 가상 속성).
추신: "Json을 Mongoose docs로 변환"과 같은 스레드가 실행되어야 한다고 생각했습니다만, 실제로는 그렇지 않습니다만, 답을 알게 되었기 때문에, 자기 포스트 앤 셀프 앤 셀프 앤서(self-post-and-self-answer)를 하는 것은 좋지 않다고 생각합니다.
res.json()을 사용하여 임의의 개체를 jsonify할 수 있습니다.lian()은 mongoose 쿼리의 빈 필드를 모두 삭제합니다.
UserModel.find().lean().exec(function (err, users) { return res.json(users); }
나한테는 효과가 있었어.
Products.find({}).then(a => console.log(a.map(p => p.toJSON())))
또한 getters를 사용하는 경우 (스키마를 정의할 때) 옵션도 추가해야 합니다.
new mongoose.Schema({...}, {toJSON: {getters: true}})
다음 옵션을 사용해 보십시오.
UserModel.find({}, function (err, users) {
//i got into errors using so i changed to res.send()
return res.send( JSON.parse(JSON.stringify(users)) );
//Or
//return JSON.parse(JSON.stringify(users));
}
이게 아주 흔한 일이라는 걸 생각하면 이게 얼마나 번거로운 일인지 잠시 비웃는 것 같았어요
굳이 문서를 파헤치지 않고 대신 이걸 해킹했어요
const data = await this.model.logs.find({ "case_id": { $regex: /./, $options: 'i' }})
let res = data.map(e=>e._doc)
res.forEach(element => {
//del unwanted data
delete element._id
delete element.__v
});
return res
- 먼저 case_id 필드의 값이 전혀 없는 모든 문서를 가져옵니다(컬렉션 내의 모든 문서를 가져옵니다).
- 그런 다음 array.map을 통해 mongoose 문서에서 실제 데이터를 가져옵니다.
- i를 직접 변환하여 객체의 불필요한 소품 제거
언급URL : https://stackoverflow.com/questions/9952649/convert-mongoose-docs-to-json
'source' 카테고리의 다른 글
새로운/분리된 범위를 요구하는 여러 지시 [myPop, myDraggable] (0) | 2023.03.16 |
---|---|
Woocommerce 3.4+의 체크아웃 필드에서 "(옵션)" 텍스트를 삭제합니다. (0) | 2023.03.16 |
TypeScript 컴파일러가 tsconfig.json을 무시하는 이유는 무엇입니까? (0) | 2023.03.16 |
Qt5에서 JSON 파일을 작성/읽기/기입하는 방법 (0) | 2023.03.16 |
Redux 상태가 변경되었습니다. React가 재렌더를 트리거하지 않는 이유는 무엇입니까? (0) | 2023.03.16 |