按ID查询Firebase Firestore文档

时间:2018-01-26 16:59:45

标签: firebase google-cloud-firestore

当我从“云端Firestore数据模型”中获取数据时指南"每个文件都用名称标识。"是否可以通过该文档标识符(名称或ID)查询集合?

例如,集合中的文档" Things"有ID:0,1,2等:

enter image description here

是否可以查询ID小于100的文档?

5 个答案:

答案 0 :(得分:16)

您可以使用特殊的标记FieldPath.documentId()通过documentId进行查询,例如:

const querySnap = collection.where(firebase.firestore.FieldPath.documentId(), '<', '100').get();

但请注意,文档ID是字符串,因此这将包括ID为“0”或“1”的文档,但不包括“2”,因为“2”&gt; '100'按字典顺序排列。

因此,如果您需要数字查询,则需要将文档ID作为数字字段写入文档,然后对其进行常规查询。

答案 1 :(得分:2)

在python中,您应该使用完整的文档名称

# variable renamed from NAMES as uppercase is meant for constants
names = ['Bella', 'Bruno', 'Ringo', 'Spot', 'Fluffy', 'Snowball', 'Doc']

def array_to_hash_array(array)
  # added a result array for building up the final object to be returned
  result = []
  i = 1

  # changed to iterate over the passed in array object
  array.each do |name|  
    # using Hash literal instead of Hash.new since it allows us 
    # to specify contents of hash object directly
    name = { :name => name, :id => i }
    
    # push to result object instead of same iterated array
    result << name
    i += 1
  end
  
  # return built up result object
  result
end

p array_to_hash_array(names)
# => [{:name=>"Bella", :id=>1}, {:name=>"Bruno", :id=>2}, {:name=>"Ringo", :id=>3}, {:name=>"Spot", :id=>4}, {:name=>"Fluffy", :id=>5}, {:name=>"Snowball", :id=>6}, {:name=>"Doc", :id=>7}]

答案 2 :(得分:0)

你也可以试试&#34;填充&#34;你的ids,以便&#39; 1&#39;成为&#39; 001&#39;&#39; 2&#39;成为&#39; 002&#39;等等。如果你不知道你的项目总数,这似乎不方便,但它应该让你的查询工作。

答案 3 :(得分:0)

我已经找到这种方式

constructor(private afs: AngularFirestore) { }

ngOnInit() {
  private thingsDoc: AngularFirestoreDocument<Item>;
  this.thingsDoc = this.afs.collection<any('Things').doc(INSERT_YOUR_ID);

  this.thingsDoc.valueChanges().subscribe((value: any) => {
   console.log('thing', value);
  });
}

答案 4 :(得分:-1)

是的,您可以查询由@Michael Lehenbaur's response中建议的ID标识的文档。

我想补充一点,因为可预测的顺序键很容易导致可伸缩性问题,所以这是不好的做法。您应该使用随机生成的密钥来避免数据库中出现热点。 供参考,请参见firebase mailing list discussion