Mongoose 컬렉션에서 특정 필드를 제외하려면 어떻게 해야 합니까?
Mongoose ODM(Mongoose 3.3.1)을 사용하는 NodeJS 어플리케이션을 가지고 있습니다.컬렉션에서 1을 제외한 모든 필드를 가져오고 싶습니다.예:컬렉션 제품이 있습니다. 6개의 필드가 있습니다. "이미지" 필드를 제외한 모든 필드를 선택합니다. "제외" 메서드를 사용했지만 오류가 발생했습니다.이게 내 암호였어
var Query = models.Product.find();
Query.exclude('title Image');
if (req.params.id) {
Query.where('_id', req.params.id);
}
Query.exec(function (err, product) {
if (!err) {
return res.send({ 'statusCode': 200, 'statusText': 'OK', 'data': product });
} else {
return res.send(500);
}
});
그러나 이것은 오류를 반환한다.
Express
500 TypeError: Object #<Query> has no method 'exclude'.........
나도 노력했어var Query = models.Product.find().exclude('title','Image');
그리고.var Query = models.Product.find({}).exclude('title','Image');
하지만 같은 오류가 발생합니다.Mongoose 컬렉션에서 특정 필드를 하나(2) 제외하는 방법.
현재(3.x) Mongoose 빌드에서 필드 선택에 사용합니다.
제외할 필드 이름 앞에 다음 이름을 붙입니다.-
; 고객님의 경우:
Query.select('-Image');
Quick aside: JavaScript에서는 대문자로 시작하는 변수는 컨스트럭터 함수용으로 예약해야 합니다.그래서 이름을 바꾸는 것을 고려해보세요.Query
~하듯이query
당신의 코드로.
그 .exclude 함수에 대해 어디서 읽는지 모르겠습니다.왜냐하면 어떤 문서에서도 찾을 수 없기 때문입니다.
그러나 찾기 메서드의 두 번째 매개 변수를 사용하여 필드를 제외할 수 있습니다.
db.inventory.find( { type: 'food' }, { type:0 } )
이 작업은 유형 필드의 값이 음식인 모든 문서를 반환하지만 출력에 유형 필드를 포함하지 않습니다.
Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
// put your code
});
이 코드가 제 프로젝트에서 작동했어요감사합니다!!좋은 하루 되세요.
넌 할 수 있어
const products = await Product.find().select(['-image'])
비동기 wait와 함께 사용하고 있습니다.
async (req, res) => {
try {
await User.findById(req.user,'name email',(err, user) => {
if(err || !user){
return res.status(404)
} else {
return res.status(200).json({
user,
});
}
});
} catch (error) {
console.log(error);
}
Mongoose 업데이트 버전에서는 다음과 같이 사용하여 선택한 필드를 얻을 수 있습니다.
user.findById({_id: req.body.id}, 'username phno address').then(response => {
res.status(200).json({
result: true,
details: response
});
}).catch(err => {
res.status(500).json({ result: false });
});
나는 특집을 만들고 있다.프로젝트를 수집할 사용자 이름보다 userId 배열 이름 "collectedUser"를 저장합니다.또한 "collected Users" 대신 "isCollected" 필드를 반환하고 싶습니다.그래서 선택은 내가 원하는 것이 아니다.하지만 해결 방법이 있어요
데이터베이스에서 프로젝트를 가져온 후 "isCollected"를 추가합니다.
for (const item of projects) {
item.set("isCollected", item.collectedUsers.includes(userId), {
strict: false,
})
}
그리고 이것은 데코레이터 @Schema에 있습니다.
@Schema({
timestamps: true,
toObject: {
virtuals: true,
versionKey: false,
transform: (doc, ret, options): Partial<Project> => {
return {
...ret,
projectManagers: undefined,
projectMembers: undefined,
collectedUsers: undefined
}
}
}
})
드디어 컨트롤러에 탑재
projects = projects.map(i => i.toObject())
정의되지 않은 묘한 속임수지만, 정말 효과가 있습니다.
근데 난 nestjs를 쓰고 있어.
이렇게 하면 돼
const products = await Product.find().select({
"image": 0
});
쿼리 필드(예: 비밀번호 필드)에서 필드를 생략하는 방법보다 글로벌 옵션과 유사한 방법을 찾는 모든 사용자에게 정의되지 않은 상태로 반환되는 getter를 사용하는 것도 도움이 됩니다.
{
password: {
type: String,
required: true,
get: () => undefined,
},
}
NB: 옵션에서 Getters를 활성화해야 합니다.{ toObject: { getters:true } }
속성을 추가하여 스키마 정의에서 필드를 제외할 수 있습니다.
excludedField : {
...
select: false,
...
}
결과에 추가할 때마다 find()에 추가합니다.
find().select('+excludedFiled')
언급URL : https://stackoverflow.com/questions/14559200/how-to-exclude-one-particular-field-from-a-collection-in-mongoose
'programing' 카테고리의 다른 글
componentDidUpdate() 내의 setState() (0) | 2023.03.01 |
---|---|
Reactjs "Error: ENOENT: 그런 파일이나 디렉토리가 없습니다.열어주세요.jsx 파일을 tsx로 변환한 후 (0) | 2023.03.01 |
Metabox에서 WordPress 갤러리 업로더/실렉터 호출 (0) | 2023.03.01 |
numberposts, showposts, posts_per_page.뭐가 다른데? (0) | 2023.03.01 |
Javascript JSON 어레이 해석 방법 (0) | 2023.03.01 |