firebase 使用无效数据调用了函数FieldValue.arrayUnion(),serverTimestamp()只能与update()和set()一起使用

lhcgjxsq  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(145)
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;
      })

    }

带angular的Firestore(默认使用firebase SDK,不使用angularfire)

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

brccelvz

brccelvz1#

使用此
let deposit.created_at= firebase.firestore.Timestamp.now();
更多信息请访问https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp#now

w8ntj3qf

w8ntj3qf2#

不能将FieldValue.serverTimestamp()用作对文档字段的数组类型值进行联合(添加)或删除的值。如果你想使用这个时间戳值,你需要将它直接传递给你正在更新或设置的字段。对于FieldValue类中的所有内容都是如此。该类以这种方式命名是有原因的-它只适用于 * 字段值 *,而不是数组的元素。请注意,嵌套的Map字段确实算作字段值。在路径中包含任何数组都是不可行的。
您必须考虑另一种方式来构建您的数据,以满足您的需求并满足Firestore的要求。

txu3uszq

txu3uszq3#

根据此页面:https://github.com/invertase/react-native-firebase/issues/1831
目前尚不支持。
但是如果你不需要firebase服务器的时间:你可以使用经典的Date对象:

const formattedDate = data.creation_date.toDate().toLocaleDateString('fr-FR', {year:'numeric' ,month:'long' ,day:'numeric'});

query_document = <Define your document with FIREBASE>

await updateDoc(query_document, {
update_time: arrayUnion(formattedDate)
})

相关问题