anchor.diff:  
       // Conditions can be chained from other [Query] instances
       void addCondition(dynamic field, String operator, dynamic value) {
  -      FieldPath fieldPath =
  -          field is String ? FieldPath.fromString(field) : field as FieldPath;
  -      final List<dynamic> condition = <dynamic>[fieldPath, operator, value];
  +      List<dynamic> condition;
  +
  +      if (field == FieldPath.documentId) {
  +        condition = <dynamic>[field, operator, value];
  +      } else {
  +        FieldPath fieldPath =
  +            field is String ? FieldPath.fromString(field) : field as FieldPath;
  +        condition = <dynamic>[fieldPath, operator, value];
  +      }
  +
         assert(
             conditions
                 .where((List<dynamic> item) => equality.equals(condition, item))
  
positive.code: 
    /// Asserts that the query [field] is either a String or a [FieldPath].
    void _assertValidFieldType(dynamic field) {
      assert(field is String || field is FieldPath,
          'Supported [field] types are [String] and [FieldPath].');
    }
  
  
negative.code:   ///
    /// After a [FieldPath.documentId] order by call, you cannot add any more [orderBy]
    /// calls.
    ///
    /// Furthermore, you may not use [orderBy] on the [FieldPath.documentId] [field] when
    /// using [startAfterDocument], [startAtDocument], [endAfterDocument],
    /// or [endAtDocument] because the order by clause on the document id
  