【问题标题】:How to update nested document within nested document in firestore?如何在firestore的嵌套文档中更新嵌套文档?
【发布时间】:2020-03-12 00:32:08
【问题描述】:

这是我的功能

exports.updateUserSettings = functions.https.onRequest((request, response) => {
  cors(request, response, () => {
    setResponseHeaders(response);
    console.log('input', request.body);
    const name = request.body.name;
    const settings = request.body.settings;

     return db
      .collection(COLLECTION_USERS)
      .doc(name)
      .update(settings)
      .then(() => {
        return response.status(200).json({
          success: true,
          data: null
        });
      })
      .catch(error => {
        return response.status(200).json({
          success: false,
          error: error,
          data: null
        });
      });
  });
});

这是我的 Firestore 文档

我想更新我的设置对象。这是我的请求正文

 { name: 'frank6',
   settings: '{"autoPass":true,
   "autoRoll":true,
   "colors": {
     "check":"#000000", 
     "dark":"#b58863", 
     "light":"#f0d9b5", 
     "mate":"#ff4500", 
     "selected":"#90ee90", 
     "source":"#90ee90", 
     "target":"#228b22"
    }, 
   "language":"en",
   "showCheckMoves":true,
   "showFileRank":true,
   "showLastOpponentMove":true,
   "showMateMoves":true,
   "showMoves":true,
   "sounds":true,
   "view":"2D"
   }' 
 }

它有一个错误错误:参数“数据”的值不是有效的 Firestore 文档。输入不是普通的 JavaScript 对象。我知道如何根据https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects 更新嵌套文档,但我不确定为什么会发生此错误,也许我需要格式化我的请求正文,但我现在知道如何了。

我也收到了来自我的颤振飞镖网络应用程序的请求

Future<void> updateUserSettings(ChexiUser user) async {
  await http.post(CLOUD_FUNCTIONS_BASE_URL + '/updateUserSettings', body: {
    'name': user.name,
    'settings': convert.jsonEncode(user.toSettingsFirebaseDocument())
  });
}

这是我的 toSettingsFirebaseDocument 函数

Map<String, dynamic> toSettingsFirebaseDocument() {
  return {
    'autoPass': settingsAutoPass,
    'autoRoll': settingsAutoRoll,
    'colors': {
      'check': settingsColorsCheck,
      'dark': settingsColorsDark,
      'light': settingsColorsLight,
      'mate': settingsColorsMate,
      'selected': settingsColorsSelected,
      'source': settingsColorsSource,
      'target': settingsColorsTarget
    },
    'language': settingsLanguage,
    'showCheckMoves': settingsShowCheckMoves,
    'showFileRank': settingsShowFileRank,
    'showLastOpponentMove': settingsShowLastOpponentMove,
    'showMateMoves': settingsShowMateMoves,
    'showMoves': settingsShowMoves,
    'sounds': settingsSounds,
    'view': settingsView
  };
  }
 }

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore google-cloud-functions


    【解决方案1】:

    好吧,事实证明这只是一个简单的错误。我只需要用 JSON.parse() 包装我的 request.body

    const settings = JSON.parse(request.body.settings);
    

    而且它工作正常。我不会删除这个问题,也许它会对遇到类似问题的其他人有用。

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2018-09-19
      • 2016-08-04
      • 2019-05-11
      • 2021-12-14
      • 1970-01-01
      • 2018-03-09
      • 2017-10-20
      • 2010-11-11
      相关资源
      最近更新 更多