sql >> Database >  >> NoSQL >> MongoDB

Mongoose:hoe gaat het met _doc?

Bijwerken

Misschien heb ik uw oorspronkelijke vraag verkeerd begrepen, maar nu lijkt het erop dat de aard van uw vraag is gewijzigd, dus de onderstaande informatie is niet relevant, maar ik laat het hierbij. :)

Ik heb je code getest en bij mij werkt het prima. Mongoose voert geen speciale code uit wanneer u eigenschappen instelt die geen deel uitmaken van het schema (of een paar andere speciale eigenschappen). JavaScript ondersteunt momenteel geen aanroepcode voor eigenschappen die nog niet bestaan ​​(dus Mongoose kan de set van de goo niet in de weg staan onroerend goed bijvoorbeeld).

Dus, wanneer u de eigenschap instelt:

foo.goo = { c: 1 };

Mongoose is er niet bij betrokken. Als uw console.log iets anders was dan de code die u weergaf, kon ik zien dat deze onjuist zou kunnen rapporteren.

Bovendien, wanneer u send de resultaten terug als JSON, JSON.stringify wordt aangeroepen, die toString . aanroept op uw Mongoose-model. Wanneer dat gebeurt, gebruikt Mongoose alleen de eigenschappen die in het schema zijn gedefinieerd. Er worden dus standaard geen extra eigenschappen teruggestuurd. U heeft de aard van de data gewijzigd array om rechtstreeks naar de Mongoose-gegevens te wijzen, dus het vermijdt dat probleem.

Details over normaal gedrag

Wanneer u de eigenschap goo . instelt met Mongoose gebeuren er nogal wat dingen. Mongoose maakt eigenschap getters/setters via de Object.defineProperty (sommige docs ). Dus, wanneer u de goo eigenschap, die u heeft gedefinieerd als een [String] , gebeuren er een paar dingen:

  1. Mongoose-code wordt aangeroepen voordat de waarde wordt ingesteld op de objectinstantie (in tegenstelling tot een eenvoudig JavaScript-object)
  2. Mongoose maakt een array (optioneel) om de gegevens op te slaan (een MongooseArray ) die de arraygegevens zal bevatten. In het voorbeeld dat je hebt gegeven, wordt deze gemaakt, aangezien je geen array hebt doorgegeven.
  3. Mongoose zal proberen je gegevens naar het juiste type te casten
  4. Het roept toString . aan op de gegevens die zijn doorgegeven als onderdeel van de cast.

De resultaten zijn dus dat het document nu een array bevat met een toString versie van het object dat je hebt doorgegeven.

Als je de inhoud van de goo . hebt gecontroleerd eigenschap, zou je zien dat het nu een array is met een enkel element, wat een string is die [object Object] bevat . Als u een meer basistype had gekozen of overeenkwam met het opslagtype van de bestemmingseigenschap, zou u zien dat een basiscontrole op gelijkheid zou hebben gewerkt.



  1. MongoDB $mergeObjects

  2. HBase Clusters Gegevenssynchronisatie met HashTable/SyncTable-tool

  3. Dagen toevoegen/aftrekken aan ISODate in MongoDB Shell

  4. Hoe te herstellen van een MongoDB-terugdraaiing?