Firestore“where”查询未按预期工作

我正在尝试从我的 firestore 数据库中进行一个简单的查询,但我遗漏了一些非常明显的东西。我尝试在线查找,但没有任何效果。对于某些背景,我有一个“cf”集合,我试图在其中查询“hsc”值等于“1”的对象,但我没有得到任何回报。

http://img1.mukewang.com/6482913c0001295725180600.jpg

exports.getOneTodo = (request, response) => {

    db

        .collection('cf')

        .where("hsc", "==", "1") 

        .get()

        .then((doc) => {


            if (!doc.exists) {

                return response.status(404).json(

                    { 

                        error: 'Todo not found' 

                    });

            }

            TodoData = doc.data();

            TodoData.todoId = doc.id;

            return response.json(TodoData);

        })

        .catch((err) => {

            console.error(err);

            return response.status(500).json({ error: error.code });

        });

};

http://img1.mukewang.com/6482914c000162a806820509.jpg

以下是 Firestore 规则。


rules_version = '2';

service cloud.firestore {

  match /databases/{database}/documents {

    match /{document=**} {

      allow read, write

    }

  }

}

我正在通过邮递员对此进行测试。我已经尝试将 firebase 规则更改为适用于任何事物,但似乎仍然没有任何效果。


更新:以下是我初始化数据库的方式


const admin = require('firebase-admin');


admin.initializeApp();


const db = admin.firestore();


module.exports = { admin, db };


慕雪6442864
浏览 125回答 2
2回答

达令说

您的代码需要一个文档,但必须为查询返回多个文档做好准备。当您在 Query 对象上运行时get(),它将产生一个QuerySnapshot对象。正如您从 API 文档中看到的那样,它没有属性exists。该属性的检查将始终为“假”。您要做的是检查结果,首先查看是否有任何文档,然后获取第一个:db        .collection('cf')        .where("hsc", "==", "1")         .get()        .then((qsnapshot) => {            if (qsnapshot.docs.length > 0) {                const dsnapshot = qsnapshot.docs[0];                // send the response using dsnapshot.data()            }            else {                // send the response saying nothing was found            }        })

HUWWW

现在你需要使用  db.collection("id").whereGreaterThan("field","value")   .whereEqualTo("field","value")   .whereLessThen("field","value")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript