我正在使用貓鼬創建一個檔案,但我找不到為檔案上的一些元素創建唯一 ID 的方法。
例如:
Document {
_id: ObjectId(...),
title: "Post Title",
comments: [
{ NEEDED_ID: 1, value: "abc"},{ NEEDED_ID: 2, value: "abc"}
],
input: {
isInput: true,
NEEDED_ID: 3,
}
}
希望你能幫我解決這個問題。
uj5u.com熱心網友回復:
如果您需要一個自動遞增的 id,請檢查 mongoDB 中的自動遞增:https : //www.mongodb.com/basics/mongodb-auto-increment
來自上面帶有 Atlas 的 mongoDB 檔案的示例:
// create collections
db.createCollection("students");
db.createCollection("counters");
// create trigger
exports = async function(changeEvent) {
var docId = changeEvent.fullDocument._id;
const countercollection = context.services.get("<ATLAS-CLUSTER>").db(changeEvent.ns.db).collection("counters");
const studentcollection = context.services.get("<ATLAS-CLUSTER>").db(changeEvent.ns.db).collection(changeEvent.ns.coll);
var counter = await countercollection.findOneAndUpdate({_id: changeEvent.ns },{ $inc: { seq_value: 1 }}, { returnNewDocument: true, upsert : true});
var updateRes = await studentcollection.updateOne({_id : docId},{ $set : {studentId : counter.seq_value}});
console.log(`Updated ${JSON.stringify(changeEvent.ns)} with counter ${counter.seq_value} result : ${JSON.stringify(updateRes)}`);
};
// Replace <ATLAS-CLUSTER> with your cluster service name.
db.students.insert({
"name":"Jhon Doe"
});
db.students.insert({
"name":"David Smith"
});
db.students.insert({
"name":"Amanda Herny"
});
// get students from atlas
db.students.find().pretty();
如果你需要在 node 中創建一個隨機 id,你可以使用crypto包。
選項1:
const crypto = require("crypto");
// create id
const _id = crypto.randomBytes(16).toString("hex");
// '4a82db25ba403269c009db0129a032f3'
選項 2:
const { randomUUID } = require("crypto");
const uuid = randomUUID()
// 'e92b8088-7fd2-40fd-ad87-2c16cbedfc94'
編輯:關于您的評論,randomUUID()每次肯定都會生成一個唯一的 ID。如果它不適合您,請仔細檢查您的實施。您可以像這樣在演示腳本中測驗 uuid 生成:
const { randomUUID } = require("crypto");
numberOfIds = 5;
// generate five unique id's
for (let i = 0; i < numberOfIds; i ) {
const uuid = randomUUID();
console.log(uuid);
// prints 5 id's
// f0151ff5-2656-400f-b4e6-c5549324f8f9
// a8223ae3-6259-4114-951b-8c12c3d932bf
// 3a0404fd-6f5a-40d3-9726-c549f6d62ab4
// 35178ac4-62d5-4654-938e-0ffac378751a
// 458bf08f-07d2-4849-bf67-6f328ff93109
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408425.html
標籤:
