Mongoose 문자열 키에 Json 개체 저장
제 Mongoose 스키마에는 String이라는 필드가 있는데, 그 필드에 JSON 객체를 저장할 수 있기를 원합니다.가능합니까?Postgres에서는 사전을 문자열 열에 저장할 수 있습니다.
사전(실제 JSON 개체)은 단순한 읽기 및 쓰기 값이며 쿼리가 필요하지 않고 하나의 값일 뿐 값 배열이 아니기 때문에 그렇게 하고 싶습니다.
네, 그냥 보관하시면 됩니다.{myJsonProperty: JSON.stringify(myObject)}
당신이 또한 그냥 설정할 수 있다는 것을 알기를 바랍니다.{myJsonProperty: Object}
mongoose 스키마에서 개체를 아무 이유 없이 문자열로 변환하지 않고 전체 개체를 저장합니다.스키마가 포함된 중첩 문서일 필요는 없으며, 일반 자바스크립트 객체일 수 있습니다.
필드 유형을 "String"에서 "Object"로 변경할 수 있는 경우 json을 그대로 저장할 수 있습니다.
var schema_obj = new Schema({
field1: Object,
..
});
받아들여진 대답은 대부분의 상황에서 좋습니다.
그러나 저장할 개체가 있는데 개체 키를 제어할 수 없는 경우(예: 사용자가 제출한 키일 수 있음) 이러한 키를 문자열화된 JSON으로 저장하는 것이 좋습니다.이렇게 하면 키에 예약된 문자가 포함되어서는 안 된다는 MongoDB의 제한을 극복할 수 있습니다. $
또는.
.
Mongoose 게터 및 세터를 사용하여 다음과 같은 작업을 수행할 수 있습니다.
data: {
type: String,
get: function(data) {
try {
return JSON.parse(data);
} catch(error) {
return data;
}
},
set: function(data) {
return JSON.stringify(data);
}
}
스택 오버플로에 대한 6개 변경 제한으로 인해 원본을 변경할 수 없습니다. 다시 게시된 멋진 작업 톰은 캐치 블록에서 캐치(err)를 놓치고 있었습니다.
data: {
type: String,
get: function(data) {
try {
return JSON.parse(data);
} catch(err) {
return data;
}
},
set: function(data) {
return JSON.stringify(data);
}
}
우리는 구조를 유지하고 스트링을 하지 않을 필요가 있었기 때문에 이를 처리하기 위해 다음과 같은 방법을 생각해 냈습니다.
const setMongoMixedWithBadKeys = data =>
Array.isArray(data)
? data.map(setMongoMixedWithBadKeys)
: typeof data === 'object'
? Object.entries(data).reduce((a, [key,value])=>({...a, [key.replace('.','__').replace('$','___')]:setMongoMixedWithBadKeys(value)}), {})
: data
const getMongoMixedWithBadKeys = data =>
Array.isArray(data)
? data.map(getMongoMixedWithBadKeys)
: typeof data === 'object'
? Object.entries(data).reduce((a, [key, value])=> ({...a, [key.replace('__','.').replace('___','$')]:getMongoMixedWithBadKeys(value)}), {})
: data
data: {
type: Mixed,
get: getMongoMixedWithBadKeys,
set: setMongoMixedWithBadKeys
}
언급URL : https://stackoverflow.com/questions/17497875/storing-json-object-in-mongoose-string-key
'it-source' 카테고리의 다른 글
Android 오류: *.apk를 장치에 설치하지 못했습니다 *: 시간 초과 (0) | 2023.05.31 |
---|---|
PowerShell에서 로컬 호스트 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.05.31 |
페이지 gem을 설치할 수 없습니다. (0) | 2023.05.31 |
모바일 사파리에서 전화 번호 연결을 비활성화하는 방법은 무엇입니까? (0) | 2023.05.31 |
"debug할 malloc_error_break의 중단점 설정" 방법 (0) | 2023.05.31 |