Er zijn hier verschillende problemen:
1) Houd er rekening mee dat MongoDB alle documenten opslaat in het BSON-formaat. Merk ook op dat de BSON-specificatie verwijst naar een UTF-8-tekenreekscodering, niet naar een UTF-16-codering.
Ref:http://bsonspec.org/#/specification
2) Alle stuurprogramma's, inclusief het JavaScript-stuurprogramma in de mongo-shell, moeten correct omgaan met strings die zijn gecodeerd als UTF-8. (Als ze dat niet doen, is het een bug!) Veel van de stuurprogramma's gaan toevallig ook goed om met UTF-16, hoewel voor zover ik weet UTF-16 niet officieel wordt ondersteund.
3) Toen ik dit testte met het Python-stuurprogramma, kon MongoDB met succes een tekenreekswaarde laden en retourneren die een gebroken UTF-16-codepaar bevatte. Ik kon echter geen gebroken codepaar laden met behulp van de mongo-shell, en evenmin kon ik een string met een gebroken codepaar opslaan in een JavaScript-variabele in de shell.
4) mapReduce() werkt correct op tekenreeksgegevens met een correct UTF-16-codepaar, maar het genereert een fout wanneer mapReduce() wordt uitgevoerd op tekenreeksgegevens die een gebroken codepaar bevatten.
Het lijkt erop dat de mapReduce() niet werkt wanneer MongoDB de BSON probeert te converteren naar een JavaScript-variabele voor gebruik door de JavaScript-engine.
5) Ik heb Jira-probleem SERVER-6747 ingediend voor dit probleem. Voel je vrij om het te volgen en te stemmen.