目前,我一直在将我的 firebase 应用程序从实时数据库移动到云 Firestore。为此,我有两个独立的 firebase 项目:
- 我的项目 <- 我的应用程序使用的当前项目
- my-project-firestore <- 我要迁移到的项目
我从当前项目中导出了所有用户并将它们导入回新项目。
目前我的react-redux-firebase
配置看起来像这样
export const reduxFirebase = {
userProfile: "users"
};
它使用户配置文件被保存到路径下的实时数据库/users
现在我使用这样的python脚本将此路径下的所有文档移动到云firestore数据库中的同一路径
def migrate_users(project_id, firebase_app, firestore_client):
path = "/users"
firestore_path = "users/{customer_id}"
print(
f"migrating from project: {project_id}, partner_id: {partner_id}, path: {path}"
)
ref = db.reference(path, firebase_app)
document = ref.get() or {}
items = document.items()
size = len(items)
for counter, item in enumerate(items):
customer_id = item[0]
notes = item[1]
print(f"{counter+1}/{size} -- migrating customer_id: {customer_id}")
current_document = firestore_client.document(
firestore_path.format(
customer_id=customer_id
)
)
current_document.set(notes)
所以现在理论上我应该在两个数据库中拥有关于用户及其个人资料的相同状态的数据。
我添加了redux-firestore
依赖项
"react-redux-firebase": "2.5.1",
"redux-firestore": "^0.13.0",
我在我的反应应用程序中更改了一些代码
export const reduxFirebase = {
userProfile: "users",
useFirestoreForProfile: true
};
...
firebase.initializeApp(firebaseConfig());
firebase.firestore()
...
const composedEnhancers = composeEnhancers(
reactReduxFirebase(firebase, reduxConfig),
reduxFirestore(firebase),
applyMiddleware(...middleware),
...enhancers
);
在我使用我的 gmail 帐户登录我的应用程序后,假设在 firebase 中有一些 id qWertYzAbcdEfhJijk
,当我尝试从路径下的 firestore 获取所有文档时,/users
我只能获取当有人使用新配置登录我的应用程序时创建的文档. 它没有看到我迁移的所有用户数据
export default compose(
withStyles(styles),
firestoreConnect(props => [
{
collection: "users",
storeAs: "users"
},
]),
connect(mapStateToProps, mapDispatchToProps)
)(ActiveUsersPanel);
...
const mapStateToProps = (state, props) => {
return {
users: state.firestore.data.users
};
};
...
function ActiveUsersPanel(props) {
const {firebase, classes, users} = props;
console.log(users);
...
结果仅包含一项
{"qWertYzAbcdEfhJijk":{"id":"qWertYzAbcdEfhJijk","avatarUrl":"https://lh6.go...","displayName":"My name","email":"my@email.com","providerData":[{"email":"my@email.com","phoneNumber":null,"photoURL":"https://lh6.googl...","providerId":"google.com","uid":"115418232581098xxxxxx"}]}}
并且不包含我从旧数据库迁移的所有文档,即使它们看起来相同
为什么会发生以及如何解决?
编辑:也许这张照片可以帮助更好地理解我的问题是什么
编辑:我注意到当我将react-redux-firebase
配置更改为指向其他路径时
export const reduxFirebase = {
userProfile: "storeUsers",
useFirestoreForProfile: true
};
突然它能够/users
在我的组件中正确读取