@@ -270,15 +270,7 @@ QueryBuilder.extend(/** @lends module:plugins.MongoDbSupport.prototype */ {
270270
271271 var opVal = mdbrl . call ( self , value ) ;
272272
273- /**
274- * Returns a filter identifier from the MongoDB field
275- * @event changer:getMongoDBFieldID
276- * @memberof module:plugins.MongoDbSupport
277- * @param {string } field
278- * @param {* } value
279- * @returns {string }
280- */
281- var id = self . change ( 'getMongoDBFieldID' , field , value ) ;
273+ var id = self . getMongoDBFieldID ( field , value ) ;
282274
283275 /**
284276 * Modifies the rule generated from the MongoDB expression
@@ -320,6 +312,39 @@ QueryBuilder.extend(/** @lends module:plugins.MongoDbSupport.prototype */ {
320312 */
321313 setRulesFromMongo : function ( query ) {
322314 this . setRules ( this . getRulesFromMongo ( query ) ) ;
315+ } ,
316+
317+ /**
318+ * Returns a filter identifier from the MongoDB field.
319+ * Automatically use the only one filter with a matching field, fires a changer otherwise.
320+ * @param {string } field
321+ * @param {* } value
322+ * @fires module:plugins.MongoDbSupport:changer:getMongoDBFieldID
323+ * @returns {string }
324+ * @private
325+ */
326+ getMongoDBFieldID : function ( field , value ) {
327+ var matchingFilters = this . filters . filter ( function ( filter ) {
328+ return filter . field === field ;
329+ } ) ;
330+
331+ var id ;
332+ if ( matchingFilters . length === 1 ) {
333+ id = matchingFilters [ 0 ] . id ;
334+ }
335+ else {
336+ /**
337+ * Returns a filter identifier from the MongoDB field
338+ * @event changer:getMongoDBFieldID
339+ * @memberof module:plugins.MongoDbSupport
340+ * @param {string } field
341+ * @param {* } value
342+ * @returns {string }
343+ */
344+ id = this . change ( 'getMongoDBFieldID' , field , value ) ;
345+ }
346+
347+ return id ;
323348 }
324349} ) ;
325350
0 commit comments