Taggué : mongodb

Update d’une collection MongoDB.

Par exemple, j’ai oublié un champs dans ma collection. Ici, je veux ajouter un champs userid qui sera
une version en minuscule de mon champ username (car sous MongoDB on ne peut pas faire de recherche sans tenir
compte de la casse sur un champ indexé). dans le shell Mongo :

use maDB;
db.user.find().forEach(
  function(e) {
    e.userid = e.username.toLowerCase();
    db.user.save(e);
    # ou mieux avec un update 
    # db.user.update({_id: e._id}, {$set: {userid: e.username.toLowerCase() } })
  }
);

JSON Schema

JSON Schema permet de définir vos formats de données JSON et permet de les valider. C’est assez pratique pour gérer la validation des données d’une API par exemple. Je m’en sert par exemple pour valider des données avant de les insérer dans une base MongoDB.

Il existe des implémentations pour quasiment tous les langages. J’ai utilisé par exemple jsonschema pour Python : https://github.com/Julian/jsonschema

C’est assez souple à utiliser et on peut étendre facilement les fonctionnalités. Par exemple pour valider un champ objectid, qui est le type de données par défaut utilisé par MongoDB pour stocker les id :

from bson.objectid import ObjectId
from jsonschema import Draft4Validator, validate, ValidationError, SchemaError

def json_validator(schema):

    types = {"objectid" : ObjectId}
    validator = Draft4Validator(
        schema=schema,
        types=types
    )
    return validator

validator = json_validator({"_id": "objectid"})
json_data = {"_id": ObjectId("51f4ac14261caf41e8485ce9")}
if validator.is_valid(json_data):
    # ...
else:
    for error in sorted(validator.iter_errors(json_data), key=str):
        print('{} : {}'.format(schema_path_str(error.path), error.message))