개체 배열에서 Mongoose / MongoDB $addToSet 기능 사용
Mongoose 스키마에 이 배열 속성('article')이 있다고 합니다.
articles: [
{
kind: 'bear',
hashtag: 'foo'
},
{
kind: 'llama',
hashtag: 'baz',
},
{
kind: 'sheep',
hashtag: 'bar',
}
]
사용 방법
$addToSet https://docs.mongodb.org/manual/reference/operator/update/addToSet/
고유한지 확인하기 위해 해시태그의 값을 확인하여 이 배열에 추가할 수 있습니까?
예를 들어, 위 배열에 다음 개체를 추가하려면 Mongo가 중복 개체로 '거부'하기를 원합니다.
{
kind: 'tortoise',
hashtag: 'foo'
}
왜냐하면 해시태그=foo는 이미 가져갔기 때문입니다.
문제는 제가 사용법만 알고 있다는 것입니다.$addToSet단순한 정수 배열로...
예를 들어, 기사가 다음과 같이 보일 경우:
articles: [ 1 , 5 , 4, 2]
다음과 같이 $addToSet을 사용합니다.
var data = {
"$addToSet": {
"articles": 9
}
}
model.update(data);
그러나 고유 필드가 문자열인 객체 배열에서 어떻게 동일한 작업을 수행할 수 있습니까? 이 경우 'hashtag'.서류상으로는 이것을 명확하게 알 수 없고 제가 모든 곳을 찾아본 것 같습니다.
감사해요.
연산자를 사용해야 합니다.
var data = { 'kind': 'tortoise', 'hashtag': 'foo' };
Model.update(
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$addToSet': { 'articles': data } }
)
해시태그 값이 "foo"인 "article" 배열에 하위 문서가 없는 경우에만 문서가 업데이트됩니다.
@BlakeSeven이 댓글에서 언급했듯이.
값 중 하나가 있는지 테스트하는 경우에는 관련이 없으므로 코드 명확성을 위해 를 사용하는 것이 좋습니다.하지만 그 원리는 정확합니다. 왜냐하면 그것의 일부가 아니라 전체적인 대상에 작용하기 때문입니다.
Model.update({
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$push': {'articles': data } }
)
// add the comment's id to the commentsList :
// share.comments.commentsList.addToSet(callback._id);
share.update(
{ '$push': {'comments.commentsList': mongoose.Types.ObjectId(callback._id) } }
, function(){
console.log('added comment id to the commentsList array of obectIds')
})
언급URL : https://stackoverflow.com/questions/33576223/using-mongoose-mongodb-addtoset-functionality-on-array-of-objects
'programing' 카테고리의 다른 글
| .gitignore에 없는 추적되지 않은 파일을 어떻게 표시합니까? (0) | 2023.07.13 |
|---|---|
| 데이터베이스 메일 보내기 (0) | 2023.07.13 |
| 행이 없는 경우 Oracle 삽입 (0) | 2023.07.13 |
| Asp.net core를 사용하여 다른 웹 API에 대한 프록시 만들기 (0) | 2023.07.13 |
| VueActions에서 약속을 데이지 체인으로 연결하면 무한 루프가 발생함 (0) | 2023.07.13 |