我的数据库结构如下。
hasDevice
字段是对用户文档的引用数组。
我试图用hasDevices = [...new Set(hasDevices)]
删除相同引用的重复项。但这没用。
这是我的代码。
user.get()
.then(snapshot => {
if (!snapshot.exists) {
return Error('not existing uid');
}
let hasDevices = snapshot.get('hasDevices');
if (!hasDevices) {
hasDevices = [];
}
hasDevices.push(db.collection(constants.DB_COLLECTION_DEVICES).doc(deviceId));
hasDevices = [...new Set(hasDevices)];
console.log('hasDevices', hasDevices];
return user.update('hasDevices', hasDevices);
})
如何删除重复的引用?
编辑。 console.log('hasDevices', hasDevices];
留在日志下方。
hasDevice [ DocumentReference {
_firestore:
Firestore {
_settings: [Object],
_settingsFrozen: true,
_serializer: [Serializer],
_projectId: 'sharp-imprint-234606',
_lastSuccessfulRequest: 1557034776367,
_preferTransactions: false,
_clientPool: [ClientPool] },
_path: ResourcePath { segments: [Array] } },
DocumentReference {
_firestore:
Firestore {
_settings: [Object],
_settingsFrozen: true,
_serializer: [Serializer],
_projectId: 'sharp-imprint-234606',
_lastSuccessfulRequest: 1557034776367,
_preferTransactions: false,
_clientPool: [ClientPool] },
_path: ResourcePath { segments: [Array] } },
DocumentReference {
_firestore:
Firestore {
_settings: [Object],
_settingsFrozen: true,
_serializer: [Serializer],
_projectId: 'sharp-imprint-234606',
_lastSuccessfulRequest: 1557034776367,
_preferTransactions: false,
_clientPool: [ClientPool] },
_path: ResourcePath { segments: [Array] } },
编辑2。
我终于如下解决了。
hasDevices = hasDevices.filter((v,idx) => {
if (idx === 0) return true;
for (let i = 0; i < idx; i++) {
if (v.id === hasDevices[i].id) {
return false;
}
}
return true;
});
return user.update('hasDevices', hasDevices);
答案 0 :(得分:1)
数据结构中的hasDevices不是数组,而是DocumentReference。
因此,您应该自己制作该数组的无重复版本。
请参阅: