我有一个游戏服务器 (alt:V),我想用角色的当前状态更新数据库。我的问题是这段代码:
console.log(`Character id at disconnect: ${id}`)
let saved = await db.updatePartialData(id, player.data, 'characters')
返回错误:
Error: object [{"_bsontype":"ObjectID","id":{"0":95,"1":149,"2":92,"3":176,"4":81,"5":130,"6":202,"7":111,"8":255,"9":155,"10":50,"11":164}}] is not a valid ObjectId
at serializeObjectId (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:287:11)
at serializeInto (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:935:17)
at serializeObject (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:941:17)
at serializeObject (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:347:18)
at serializeInto (/home/simon/altv-server/node_modules/bson/lib/bson/parser/serializer.js:941:17)
at BSON.serialize (/home/simon/altv-server/node_modules/bson/lib/bson/bson.js:64:28)
at Msg.serializeBson (/home/simon/altv-server/node_modules/mongodb/lib/core/connection/msg.js:126:22)
at Msg.makeDocumentSegment (/home/simon/altv-server/node_modules/mongodb/lib/core/connection/msg.js:118:33)
at Msg.toBin (/home/simon/altv-server/node_modules/mongodb/lib/core/connection/msg.js:104:25)
尽管第一行将其打印到控制台:
Character id at disconnect: 5f955cb05182ca6fff9b32a4
该updatePartialData
函数是simplymongo
npm 包的一部分,定义如下:
import mongodb from 'mongodb';
export const ObjectID = mongodb.ObjectID;
...
async updatePartialData(id, partialObjectData, collection) {
try {
await this.db
.collection(collection)
.findOneAndUpdate({ _id: ObjectID(id) }, { $set: { ...partialObjectData } });
return true;
} catch (err) {
console.error(err);
return false;
}
}
我在 Debian 10、NodeJS 15.0.1 上运行它,我所有的 npm 包都是最新的。如果可以的话请帮忙。这真让我抓狂。