Firebase获取所有用户名和&以用户输入的字符

时间:2018-01-24 05:26:09

标签: javascript firebase react-native firebase-realtime-database redux

我尝试仅提取仅以用户输入的文本开头的用户名和用户ID。

以下是我的firebase数据库:

My Firebase Database

如您所见,数据库包含一个包含用户名的用户ID列表。

  

例如:如果用户在搜索框中输入M,则查询应该   返回Jois先生及其相应的用户ID。

我正在尝试使用javascript执行此操作。以下是我的代码:

function* searchUsers(action) {
    const database = firebase.database();
    const ref = database.ref('users');
    try {
        console.log('about to fetch filters users');
        const query = ref.orderByChild('username').startAt(action.searchText);
        const snapshot = yield call([query, query.once], 'value');
        console.log('done fetching users');
        console.log(snapshot);
    }
    catch(error){
        console.log(error);
    }
}

但我没有得到预期的结果。有人可以告诉我如何查询结果以获得预期的结果吗?

3 个答案:

答案 0 :(得分:3)

Firebase数据库查询执行前缀匹配,而不是包含。但是,由于您只指定startAt(...),因此查询将匹配名称以前缀开头的所有用户,包括其后的所有名称。如果您只想要以前缀字符串开头的结果,那么您还需要使用endAt(...)

const query = ref.orderByChild('username').startAt(action.searchText)endA‌t(action.searchText+‌​"\uf8ff");
const snapshot = yield call([query, query.once], 'value');
snapshot.forEach(function(child) { 
  console.log(child.key, child.val().username);
});

答案 1 :(得分:1)

最初,我在考虑equalTo()查询以及Firebase .indexOn用户名。

然而,我们真正需要的是一个子串,如ECMAScript 6&#39} String.prototype.startsWith()方法:

.startsWith(inputValue);

所以,我看到用实时数据库做的唯一方法是获取/获取/ .once然后处理客户端,你有更强大的字符串匹配功能。我想下一个问题是如何只提取/获取每个用户密钥的用户名属性。

答案 2 :(得分:0)

要根据第一个字符进行查询,您应该获取该字符并将其传递给+ntfs函数:

startAt()