使用无效数据调用的函数FieldValue.arrayUnion()。 FieldValue.serverTimestamp()仅可用于update()和set()

时间:2018-09-14 03:18:48

标签: arrays angular typescript firebase google-cloud-firestore

addDeposit(account, deposit) {

    let depositsDoc = this.db.collection("accounts")
                      .doc(account.id)
                      .collection("deposits")
                      .doc("deposits");

    return new Promise((resolve, reject) => {

      deposit.created_at = firebase.firestore.FieldValue.serverTimestamp();

      depositsDoc.update({
        "deposits": firebase.firestore.FieldValue.arrayUnion(deposit)
      })
        .then((a) => {
           resolve('success');
        })
        .catch((error) => {
          reject("failed");
        });

    })
      .then((res) => {
        return res;
      })
      .catch((error) => {
        return error;
      })

    }

**带角度的Firestore(使用默认的Firebase SDK而不是angularfire)**

我试图通过直接添加调用时间戳的“ created_at”属性来将时间戳添加到存款对象。这样,我得到上面标题中的错误。 如何在Firestore中的对象数组中为对象添加时间戳?

2 个答案:

答案 0 :(得分:5)

使用此

let deposit.created_at= firebase.firestore.Timestamp.now();

更多信息,请访问https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp#now

答案 1 :(得分:0)

您不能使用FieldValue.serverTimestamp()作为要在文档字段的数组类型值中进行联合(添加)或从中删除的值。如果要使用该时间戳记值,则需要将其直接传递到要更新或设置的字段。

您必须考虑另一种结构化数据的方式,既可以满足您的需求,又可以满足Firestore的要求。