错误:Query.get失败:第一个参数必须是一个对象

时间:2018-08-12 03:06:05

标签: javascript reactjs firebase google-cloud-firestore

在React Native上使用Firestor。

我收到此错误:

  

错误:Query.get失败:第一个参数必须是一个对象

当我尝试从其他集合(项目)中获取用户数据时,但这不起作用。

export const itemsFetch = () => {
  return (dispatch) => {
    firebase.firestore().collection('items').get()
    .then((snapshot) => {
      const items = snapshot.docs.map(doc => doc.data());
      return items
   })
    .then((items) => {
      const userPromises = items.map((item, itemId)  => {
        const userId = item.userId;
        console.log('userId: ', userId);
        return firebase.firestore().collection('users').get(userId)
      .then((snapshot) => {
        console.log('snapshot:', snapshot);
        const user = snapshot.docs.data();
        return user;
        console.log('user:', user);
      })
      .then(user => ({...item, user: user, itemId}));
      });
      dispatch({ type: 'ui/loading/hide' });
      return Promise.all(userPromises);
    })
  };
};

我可以获取数据snapshot,但我仍然无法实现。

2 个答案:

答案 0 :(得分:1)

get()不接受这样的参数:

return firebase.firestore().collection('users').get(userId)

如果要按ID提取文档,则需要使用doc()构建DocumentReference,然后在其上调用get():

return firebase.firestore().collection('users').doc(userId).get()

这将返回一个承诺,并产生一个包含该文档内容的DocumentSnapshot。

答案 1 :(得分:1)

请参阅QuerySnapshot文档。 .where是可选的。

let query = firestore.collection('col').where('foo', '==', 'bar');

query.get().then(querySnapshot => {
  let docs = querySnapshot.docs;
  for (let doc of docs) {
    console.log(`Document found at path: ${doc.ref.path}`);
  }
});