ฉันพยายามทำสิ่งที่คล้ายกับสิ่งนี้ แต่แทนที่จะลบคอลัมน์ออกจากเอกสารฝังตัว ฉันใช้เวลาสักครู่เพื่อค้นหาวิธีแก้ปัญหาและนี่เป็นโพสต์แรกที่ฉันพบดังนั้นฉันคิดว่าฉันจะโพสต์ที่นี่สำหรับคนอื่นที่พยายามทำเช่นเดียวกัน
ดังนั้นสมมติว่าข้อมูลของคุณมีลักษณะดังนี้:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
ในการลบคอลัมน์words
ออกจากเอกสารฝังตัวให้ทำดังนี้
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
หรือใช้ updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
$unset
เท่านั้นที่จะแก้ไขได้ถ้าค่าที่มีอยู่ แต่ก็จะไม่ทำการนำปลอดภัย (มันเคยชินตรวจสอบว่าtags
มีอยู่ครั้งแรก) เพื่อให้อยู่เป็นสิ่งจำเป็นในเอกสารที่ฝังตัว
สิ่งนี้ใช้โอเปอเรเตอร์ตำแหน่งทั้งหมด ( $[]
) ซึ่งเปิดตัวในเวอร์ชั่น 3.6