MongoDB: 비어 있지 않은 문서 배열과 일치
컬렉션은 다음과 같이 구성되어 있습니다.
{
_id: 1,
score: [
{
foo: 'a',
bar: 0,
user: {user1: 0, user2: 7}
}
]
}
특정 값이 'bar'인 'score'(점수 배열의 요소)와 비어 있지 않은 'user' 하위 문서가 하나 이상 있는 모든 문서를 찾아야 합니다.
이것이 바로 제가 생각해 낸 것입니다(그리고 그것이 효과가 있어야 할 것 같았습니다).
db.col.find({score: {"$elemMatch": {bar:0, user: {"$not":{}} }}})
그러나 다음 오류가 발생했습니다.
error: { "$err" : "$not cannot be empty", "code" : 13030 }
다른 방법은 없나요?
이해했습니다.{ 'score.user': { "$gt": {} } }
비어 있지 않은 문서와 일치합니다.
당신의 스키마를 잘 이해할 수 있을지 모르겠지만, 아마도 가장 간단한 방법은 score.user에 대해 "빈" 값을 갖지 않는 것일 것입니다.
대신 문서에 내용이 없는 경우 해당 필드를 문서에 포함하지 않으시겠습니까?
그렇다면 당신의 질문은 다음과 같은 것일 수 있습니다.
> db.test.find({ "score" : { "$elemMatch" : { bar : 0, "user" : {"$exists": true }}}})
즉, score.bar 에서 원하는 값을 찾습니다(이 경우 0). score.user의 미어 존재를 확인합니다($165, 문서 참조). (값이 있으면 존재합니까?).)
편집: 웁스, 당신이 가지고 있던 $elemMatch를 놓쳤습니다...
의 사용자를 추적하는 보조 배열을 추가할 수 있습니다.user
문서:
{
_id: 1,
score: [
{
foo: 'a',
bar: 0,
users: ["user1", "user2"],
user: {user1: 0, user2: 7}
}
]
}
그런 다음 새 사용자를 원자적으로 추가할 수 있습니다.
> db.test.update({_id: 1, score: { $elemMatch: {bar: 0}}},
... {$set: {'score.$.user.user3': 10}, $addToSet: {'score.$.users': "user3"}})
사용자 제거:
> db.test.update({_id: 1, score: { $elemMatch: {bar: 0}}},
... {$unset: {'score.$.user.user3': 1}, $pop: {'score.$.users': "user3"}})
쿼리 점수:
> db.test.find({_id: 1, score: {$elemMatch: {bar: 0, users: {$not: {$size: 0}}}}})
존재하지 않는 사용자만 추가하고 기존 사용자는 에서 제거합니다.user
문서, 단순화할 수 있습니다.users
배열 대신 카운터로 이동하지만 위의 항목이 더 탄력적입니다.
배열 크기를 확인하려면 $size 연산자를 확인합니다.
$group: {
_id: '$_id',
tasks: {
$addToSet: {
$cond: {
if: {
$eq: [
{
$ifNull: ['$tasks.id', ''],
},
'',
],
},
then: '$$REMOVE',
else: {
id: '$tasks.id',
description: '$tasks.description',
assignee: {
$cond: {
if: {
$eq: [
{
$ifNull: ['$tasks.assignee._id', ''],
},
'',
],
},
then: undefined,
else: {
id: '$tasks.assignee._id',
name: '$tasks.assignee.name',
},
},
},
},
},
},
},
언급URL : https://stackoverflow.com/questions/6607102/mongodb-match-non-empty-doc-in-array
'programing' 카테고리의 다른 글
'xxx.xxx.xxx ' 유형을 찾을 수 없습니다.어셈블리를 확인하십시오. (0) | 2023.05.21 |
---|---|
이클립스 오류: 'Java 가상 시스템을 생성하지 못했습니다.' (0) | 2023.05.21 |
ASP.NET에서 HTTP Referrer 가져오기 (0) | 2023.05.21 |
Postgre의 누적 합계 계산SQL (0) | 2023.05.21 |
새 Git 분기에 현재 변경 내용 삽입 (0) | 2023.05.21 |