首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在5分钟无更新后覆盖firestore字段

在5分钟无更新后覆盖firestore字段
EN

Stack Overflow用户
提问于 2019-11-28 03:24:10
回答 1查看 957关注 0票数 1

我正在展示保存来自Google firestore的数据的卡。其中一个字段是"Status“。可以从应用程序外部远程打开和关闭状态。我希望在文档没有更新5分钟或5分钟后,状态自动变为“Off”。

我想这样做的情况下,用户失去连接,不能再发送“状态”:“关闭”消息。我不想让这张卡永远写着“开”。

我正在使用Vue.js,并尝试了一些不同的东西,但我不太确定如何实现这一点。如果这个问题更适合不同的网站,我很抱歉。我也查过类似的问题,但什么也找不到。

这是一个屏幕截图来可视化我所问的问题。如果在5分钟内没有更新,我希望状态变为"Off“。或者任何时间。

代码语言:javascript
复制
<div >
    <div class="ma-4">
        <div  centered class="text-lg-center headline"> 
            Live Middleware Status 
            <p v-bind="allig">{{ seconds }}</p>
        </div>
    </div>

        <v-card  slow v-bind="allig" :class="`mx-4 my-4 ${user.Status}`" v-for="user in users" :key="user.id">
          <v-card-title flat class="pa-n3">
            <v-flex class="mx-auto" xs6 sm4 md2 lg2>
              <div class="caption grey--text">Location Site ID</div>
              <div class="title">{{user.id}}</div>
            </v-flex>
            <v-flex class="mr-auto " xs6 sm4 md2 lg2>
              <div class="caption grey--text">ID</div>
              <div class=" ml-n12 title">{{user.CustomerID}}</div>
            </v-flex>
            <v-flex style :class="`mx-auto ${user.Status}`" xs6 sm4 md2 lg2>
              <div class="caption grey--text">Current Status</div>
              <div class="status title mx-2">{{user.Status}}</div>
            </v-flex>
            <v-flex style class="mx-auto caption green--text" xs6 sm4 md2 lg2>
              <div class="caption grey--text">Last Message</div>
              <div class="Green my-2 title">{{user.TimeStamp}}</div>
            </v-flex>
          </v-card-title>
        </v-card>

      </div>
      </template>


      <script>
// eslint-disable-next-line
import firestore from "firestore";
// eslint-disable-next-line
import db from "@/components/fbInit";
import firebase from "firebase";

export default {
  // eslint-disable-next-line
  components: { },
  data() {
    return {
      wide: false,
      ToggleDelete: false,
      card: true,
      light: true,

      seconds: "",

      users: [],

      links: [{ route: "/logs" }]

    };
  },

  created() {

    var user = firebase.auth().currentUser;
    var employeeRef = db
      .collection("userProfiles")
      .doc(user.uid)
      .collection("MX")
      .orderBy("TimeStamp", "desc")

    employeeRef.onSnapshot(snap => {
      // eslint-disable-next-line
      console.log(snap.size);
      this.users = [];
      snap.forEach(doc => {
        const data = 
        {
          id: doc.id,
          Name: doc.data().Name,
          GroupHex: doc.data().GroupHex,
          DeviceType: doc.data().DeviceType,
          UserIDInt: doc.data().UserIDInt,
          CustomerID: doc.data().CustomerID,
          SiteID: doc.data().SiteID,
          SuperID: doc.data().SuperID,
          Status: doc.data().Status,
          TimeStamp: doc.data().TimeStamp,
          Original: doc.data().Original
          };
        this.users.push(data);
      });
    });
  },

  methods: {   }

};
</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 03:42:35

要可靠地做到这一点,您需要有一个服务器端进程定期检查和更新文档。一种简单的方法是使用scheduled Cloud Function。它看起来像这样:

代码语言:javascript
复制
// functions/index.js

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

exports.updateIdle = functions.pubsub.schedule('* * * * *').onRun(async () => {
  const snap = await db.collection("MX")
    .where("Status", "=", "On")
    .where("Timestamp", "<", admin.firestore.Timestamp.fromMillis(Date.now() - 5 * 60000))
    .get();

  await Promise.all(snap.docs.map(doc => doc.ref.update({Status: 'Off'})));
});

上面的函数将每分钟运行一次,查找具有超过五分钟前的时间戳的任何文档,并将每个文档更新为具有"Off"状态。

这只是一个例子,您可能需要根据您的特定需求做一些不同的操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59077203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档