Par exemple, mon code est ci-dessousEst-ce que MongoDB prend en charge l'opérateur logique dans l'expression de mise à jour?
b = c.test.users.find_one_and_update(
{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20'},
{'$set': {'user_id': '111'},
'$and': [{'device_id': {'$ne': u'c09b46863f953bec1d5c0a1a'}},
{'$set': {'device_id': 'abc'}}]}
et je reçois une exception OperationFailure: Unknown modifier: $and
. Il semble que le MongoDB ne supporte pas l'opérateur logique comme $and
dans l'expression de mise à jour. Le fait?
MISE À JOUR (Réponse @chridam):
Le code ci-dessus est juste un exemple qui veulent montrer une situation: trouver un document d'utilisateur avec un spécifié uid
, réglez-est user_id
, et définir la device_id
uniquement lorsque device_id
n'est pas égal à une certaine valeur, telle qu'une valeur d'historien.
Seuls les délégués [** opérateurs de mise à jour **] (https://docs.mongodb.com/manual/ reference/operator/update/# id1) peut être utilisé, n'importe quoi d'autre MongoDB se plaindra et jettera une erreur. Pourquoi ne pouvez-vous pas lancer cette opération comme une mise à jour atomique '{'uid': u'52ae5c7a48bd9ffb716bf4f774954d20 ',' device_id ': {' $ ne ': u'c09b46863f953bec1d5c0a1a'}}, {'$ set': {'user_id' : '111', 'device_id': 'abc'}} ', pourquoi inclure les opérateurs logiques là où ils ne devraient pas être? – chridam
pouvez-vous écrire votre schéma de document et le résultat attendu? – TomG
@chridam J'ai mis à jour ma question pour nettoyer ma question. Je vous remercie. –