mongodb:针对嵌套数组 objects 的 updatemany
mongodb: updatemany against nested array objects
这是我当前的文档:
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
}
]
}
]
}
只有一个文件,但是进入这个collection patient
我有很多病人
我需要更新每个文档,其中:
- 包含
referencedGeneralPractitioner.id is "xxx"
和
- 用传入的更新整个
referencedGeneralPractitioner[matched_document]
。
例如,假设我在 patient
collection:
上有底部文档
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
},
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"43756837R"
}
}
]
}
]
},
{
"_id":"df342343-45d5-cf4a-8374-17dc436d40ca",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
},
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"43756837R"
}
}
]
},
{
"resourceType":"practitioner",
"id": "id2",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"48596705T"
}
}
]
}
]
}
我需要 db.patient.referenceGeneralPractitioner[where id="id1] = {incoming updated referencedGeneralPractitioner}
.
假设 incoming updated refenrencedGeneralPractitioner}
是:
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
}
之后,我需要patient
collection:
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
}
]
},
{
"_id":"df342343-45d5-cf4a-8374-17dc436d40ca",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
},
{
"resourceType":"practitioner",
"id":"id2",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"48596705T"
}
}
]
}
]
}
有什么想法吗?
简单 $update
与 arrayFilters
db.collection.update({
"referencedGeneralPractitioner.id": "id1"
},
{
$set: {
"referencedGeneralPractitioner.$[elem]": {
"resourceType": "practitioner",
"id": "id1",
"cachedIdentifier": [
{
"system": {
"value": "urn:oid:1.3.6.1.4.1.19126.3"
},
"value": {
"value": "INCOMING"
}
}
]
}
}
},
{
"multi": true,
"arrayFilters": [
{
"elem.id": {
$eq: "id1"
}
}
]
})
这是我当前的文档:
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
}
]
}
]
}
只有一个文件,但是进入这个collection patient
我有很多病人
我需要更新每个文档,其中:
- 包含
referencedGeneralPractitioner.id is "xxx"
和 - 用传入的更新整个
referencedGeneralPractitioner[matched_document]
。
例如,假设我在 patient
collection:
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
},
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"43756837R"
}
}
]
}
]
},
{
"_id":"df342343-45d5-cf4a-8374-17dc436d40ca",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id": "id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"14277399B"
}
},
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"43756837R"
}
}
]
},
{
"resourceType":"practitioner",
"id": "id2",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"48596705T"
}
}
]
}
]
}
我需要 db.patient.referenceGeneralPractitioner[where id="id1] = {incoming updated referencedGeneralPractitioner}
.
假设 incoming updated refenrencedGeneralPractitioner}
是:
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
}
之后,我需要patient
collection:
{
"_id":"d283015f-91e9-4404-9202-093c28d6a931",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
}
]
},
{
"_id":"df342343-45d5-cf4a-8374-17dc436d40ca",
"referencedGeneralPractitioner":[
{
"resourceType":"practitioner",
"id":"id1",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"INCOMING"
}
}
]
},
{
"resourceType":"practitioner",
"id":"id2",
"cachedIdentifier":[
{
"system":{
"value":"urn:oid:1.3.6.1.4.1.19126.3"
},
"value":{
"value":"48596705T"
}
}
]
}
]
}
有什么想法吗?
简单 $update
与 arrayFilters
db.collection.update({
"referencedGeneralPractitioner.id": "id1"
},
{
$set: {
"referencedGeneralPractitioner.$[elem]": {
"resourceType": "practitioner",
"id": "id1",
"cachedIdentifier": [
{
"system": {
"value": "urn:oid:1.3.6.1.4.1.19126.3"
},
"value": {
"value": "INCOMING"
}
}
]
}
}
},
{
"multi": true,
"arrayFilters": [
{
"elem.id": {
$eq: "id1"
}
}
]
})