Mongoose에서 다른 스키마 참조
다음과 같은 스키마가 2개 있는 경우:
var userSchema = new Schema({
twittername: String,
twitterID: Number,
displayName: String,
profilePic: String,
});
var User = mongoose.model('User')
var postSchema = new Schema({
name: String,
postedBy: User, //User Model Type
dateCreated: Date,
comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});
위의 예시와 같이 연결하려고 했지만 방법을 알 수 없었습니다.결국 내가 이런 일을 할 수 있다면 내 삶은 매우 편안해질 것이다.
var profilePic = Post.postedBy.profilePic
당신이 찾고 있는 것은 입력 방법인 것 같습니다.먼저 포스트 스키마를 약간 변경합니다.
var postSchema = new Schema({
name: String,
postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
dateCreated: Date,
comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});
그런 다음 모델을 만듭니다.
var Post = mongoose.model('Post', postSchema);
그런 다음 쿼리를 작성할 때 다음과 같이 참조를 채울 수 있습니다.
Post.findOne({_id: 123})
.populate('postedBy')
.exec(function(err, post) {
// do stuff with post
});
부록:아무도 "인포메이션"에 대해 언급하지 않았습니다.- Mongooses인포메이션 방법을 보면 시간과 비용이 많이 듭니다: 또한 참조하는 교차 문서를 설명합니다.
http://mongoosejs.com/docs/populate.html
답변이 늦었지만, Mongoose가 Subdocuments의 개념도 가지고 있다고 덧붙였습니다.
이 구문을 사용하면 다음 구문을 참조할 수 있습니다.userSchema
의 유형으로서postSchema
다음과 같이 합니다.
var userSchema = new Schema({
twittername: String,
twitterID: Number,
displayName: String,
profilePic: String,
});
var postSchema = new Schema({
name: String,
postedBy: userSchema,
dateCreated: Date,
comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});
업데이트된 내용을 메모합니다.postedBy
활자가 있는 필드userSchema
.
그러면 게시물에 사용자 개체가 포함되어 참조를 사용하여 필요한 추가 조회가 저장됩니다.경우에 따라서는 이것이 바람직할 수도 있고, 경우에 따라서는 ref/pulate 루트가 권장될 수도 있습니다.애플리케이션의 동작에 따라 다릅니다.
이것은 D에 더해집니다.로우의 대답은 나에게 효과가 있었지만 약간의 수정이 필요했다.(댓글을 달았으면 좋았을 텐데, 평판이 좋지 않고, 몇 달 후에 다시 이 문제에 직면했을 때 이 정보를 보고 싶은데 어떻게 해결해야 할지 잊어버렸습니다.)
다른 파일에서 스키마를 Import할 경우 Import 끝에 .schema를 추가해야 합니다.
주의: 스키마를 Import하지 않고 로컬 스키마를 사용하는 대신 Import가 더 깔끔하고 다루기 쉬운 경우 [Invalid schema]설정이 표시되는지 잘 모르겠습니다.
예를 들어 다음과 같습니다.
// ./models/other.js
const mongoose = require('mongoose')
const otherSchema = new mongoose.Schema({
content:String,
})
module.exports = mongoose.model('Other', otherSchema)
//*******************SEPERATE FILES*************************//
// ./models/master.js
const mongoose = require('mongoose')
//You will get the error "Invalid schema configuration: `model` is not a valid type" if you omit .schema at the end of the import
const Other=require('./other').schema
const masterSchema = new mongoose.Schema({
others:[Other],
singleOther:Other,
otherInObjectArray:[{
count:Number,
other:Other,
}],
})
module.exports = mongoose.model('Master', masterSchema);
그 후, 이것을 사용하는 장소(내 Node.js API에서 이와 유사한 코드를 사용)에 관계없이 마스터에 다른 코드를 할당할 수 있습니다.
예를 들어 다음과 같습니다.
const Master= require('../models/master')
const Other=require('../models/other')
router.get('/generate-new-master', async (req, res)=>{
//load all others
const others=await Other.find()
//generate a new master from your others
const master=new Master({
others,
singleOther:others[0],
otherInObjectArray:[
{
count:1,
other:others[1],
},
{
count:5,
other:others[5],
},
],
})
await master.save()
res.json(master)
})
{body: "string", by: mongoose.Schema.Types.ObjectId}
그mongoose.Schema.Types.ObjectId
새로운 ID가 생성됩니다.문자열이나 숫자와 같은 보다 직접적인 타입으로 변경해 주세요.
언급URL : https://stackoverflow.com/questions/18001478/referencing-another-schema-in-mongoose
'programing' 카테고리의 다른 글
ORACLE의 select 문에서 데이터 유형 필드 가져오기 (0) | 2023.03.12 |
---|---|
매개 변수 속성이 있는 스프링 데이터 JPA 쿼리 (0) | 2023.03.12 |
Word Press는 왜 아직도 adslash(), register_globals() 및 magic_quotes를 사용하고 있습니까? (0) | 2023.03.12 |
JSON과 XML의 비교 (0) | 2023.03.12 |
UI-Router를 사용하여 사용자가 부모 상태로 이행할 때 사용자를 자녀 상태로 유도 (0) | 2023.03.07 |