首页 > 解决方案 > Firebase 数组包含 - 搜索值而不是键

问题描述

如何查询具有数字键集的数组中的值?

例如,此查询不起作用,因为我相信它正在查看索引而不是值:

var db = firebase.firestore();
var users = db.collection("Users");
var currentUser = firebase.auth().currentUser;
var result = users.where('liked', 'array-contains', currentUser.uid);
if (result.length > 0) {
  return 'You have a match!';
} else {
  return 'No matches';
}

在此处输入图像描述

标签: javascriptfirebasereact-nativegoogle-cloud-firestorereact-native-firebase

解决方案


正如 Stratubas 评论的那样,问题出在以下代码中:

var result = users.where('liked', 'array-contains', currentUser.uid);

此代码构造一个查询,但尚未执行该查询。对象result也是如此。要执行查询并从服务器获取结果,请调用查询,然后返回一个. 一旦 promise 结果,您可以在object中处理结果。Queryget()Promise<QuerySnapshot>QuerySnapshot

var query = users.where('liked', 'array-contains', currentUser.uid);
query.get().then(function(querySnapshot) {
  if (querySnapshot.size > 0) {
    console.log('You have a match!');
  } else {
    console.log('No matches');
  }
});

在更现代的 JavaScript 中,上面的内容也可以写成:

let query = users.where('liked', 'array-contains', currentUser.uid);
let querySnapshot = await query.get()
if (querySnapshot.size > 0) {
  console.log('You have a match!');
} else {
  console.log('No matches');
}

推荐阅读