【问题标题】:Firebase array-contains - search through the values not the keysFirebase 数组包含 - 搜索值而不是键
【发布时间】:2020-01-21 04:55:59
【问题描述】:

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

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

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';
}

【问题讨论】:

  • array-contains 运算符作用于数组中的值,而不是它们的索引。您可能希望在运行查询之前记录currentUser.uid 的值,以查看它是否具有您期望的值。您也可以尝试使用硬编码字符串,以排除它是由 UID 查找引起的。
  • @FrankvanPuffelen 我实际上已经尝试了这两种方法,但它仍然没有工作,所以我认为它正在脱离索引。现在我明白这不是索引/值......它必须是我如何处理返回的数据。你能告诉我返回什么数据类型吗?文档只是说明"This query returns every city document where the regions field is an array that contains west_coast. If the array has multiple instances of the value you query on, the document is included in the results only once."。它返回一个数组还是单个用户?
  • 根据 firebase.google.com/docs/reference/js/… ,您的 result 变量属于“查询”类型,因此您应该 .get() 它,如此处所述 firebase.google.com/docs/reference/js/…

标签: javascript firebase react-native google-cloud-firestore react-native-firebase


【解决方案1】:

正如 Stratubas 所说,问题出在这段代码中:

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

此代码构造一个查询,但尚未执行该查询。所以resultQuery object。要执行查询并从服务器获取结果,请调用get() on the query,然后返回Promise<QuerySnapshot>。一旦 promise 结果,您可以在QuerySnapshot object 处理结果。

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');
}

【讨论】:

  • 感谢您的信任 :) 您的用户名拼错了一点,我的 ocd 感觉很刺痛 :O
  • 糟糕.... ? 很抱歉。我已经修好了,下次一定会毫不犹豫地修复一些愚蠢的东西(尽管我希望不是来自我)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2011-12-21
  • 2022-08-19
  • 2014-03-25
  • 2019-02-27
相关资源
最近更新 更多