当我从“云端Firestore数据模型”中获取数据时指南"每个文件都用名称标识。"是否可以通过该文档标识符(名称或ID)查询集合?
例如,集合中的文档" Things"有ID:0,1,2等:
是否可以查询ID小于100的文档?
答案 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