如何通过一个字段的多个值获取数据?例如,我有包含帖子的数据库,我想查询blogId为1或2的所有帖子,按时间戳排序。
collection("posts").whereEqualTo("blogId", "1")
.whereEqualTo("blogId", 2).orderBy("timestamp", Query.Direction.DESCENDING).limit(50)
上面的代码不起作用:(
如何实现这一目标? 问候:)
答案 0 :(得分:3)
我无法找到任何有关OR条件的OR的能力的文档。但您可以在blogId
上重写您的要求,如下所示:
WHERE blogId > 0 AND blogId < 3
试试这段代码:
collection("posts")
.where("blogId", ">", "0")
.where("blogId", "<", "3")
.orderBy("timestamp", Query.Direction.DESCENDING)
.limit(50)
答案 1 :(得分:2)
您可以组合Observable并返回为一个
orQuery(){
const $one = this.afs.collection("posts", ref => ref.where("blogId","==","1")).valueChanges();
const $two = this.afs.collection("posts", ref => ref.where("blogId","==","2")).valueChanges();
return combineLatest($one,$two).pipe(
map(([one, two]) => [...one, ...two])
)
}
getOr(){
this.orQuery().subscribe(data => console.log(data))
}
答案 2 :(得分:2)
Firebase监听了我们的请求,其中包括来自IN
的{{1}}查询。这是一种7 Nov, 2019
查询,您最多可以使用OR
个过滤器。
对于android:
10 OR
答案 3 :(得分:1)
OR
运算符。
通常使用firebase语法,您可以调用两个集合:
const res1 = async collection("posts", ref => ref.where('blogId', '==', 1).get();
const res2 = async collection("posts", ref => ref.where('blogId', '==', 2).get();
,您可以合并结果,然后再投放到视图中。
但是在这种情况下,如果您具有blogId,则可以使用以下语法:
collection("posts").orderBy('blogId').startAt(1).endAt(2);
e.d
答案 4 :(得分:1)
Firestore now supports "IN" queries为此。
查询如下:
database.collection("collectionName").where("fieldName", "in", ["fieldValue1", "fieldValue2"]);
最多可以有10个值(fieldValueX)来检查其中的“ IN”。
所需的代码OP如下:
database.collection("posts").where("blogId", "in", ["1", "2"]);
答案 5 :(得分:1)
您可以使用De Morgaan's法则将AND
查询重写为OR
查询。
答案 6 :(得分:1)
对于Android,我正在使用像这样的OR查询。
List<String> values = new ArrayList<>();
values.add("Value 1");
values.add("Value 2");
,然后使用.whereIn查询。
db.collection("collectionName")
.whereIn("fieldName", values) // where values is the list we created
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
// Do your stuff
}
}
});
答案 7 :(得分:0)
试试这个
collection("posts").start("blogId", "1")
.end("blogId", 2).orderBy("timestamp", Query.Direction.DESCENDING).limit(50)
答案 8 :(得分:0)
Firestore没有OR
个查询。通过运行两个查询并将它们进行拼接,它们可以实现您的目的。
您可以例如:
const search = ( key, value ) => collection( 'users' ).where( key, '==', value ).get().then( doc => doc.data() )
Promise.all( [ search( 'name', 'John' ), search( 'name', 'Johnny' ) ] )
.then( ( [ one, two ] ) => one.concat( two ) )
.then( allResults => dothings() )