這是我的代碼:
let collection = database.collection('documents')
let savedDocumentsCollection = database.collection('savedDocuments')
let doc = await collection.find().toArray()
let saved_documents = await savedDocumentsCollection.find({username: req.session.username}).toArray()
let document_ids = []
for (var i = 0; i < doc.length; i ) {
document_ids.push(doc[i].id)
}
for (var x = 0; x < saved_documents.length; x ) {
for(let val of document_ids) {
if (val == saved_documents[x].id) {
doc = {
...doc,
saved: true
}
// console.log(true)
} else {
doc = {
...doc,
saved: false
}
// console.log(false)
}
}
}
console.log(doc)
總結一下,它是做什么的,它會在 collectiondocuments和savedDocuments. 我想要做的是將兩個集合的 id 相互比較,如果它們都存在,則傳播當前doc物件并將標志添加saved: true到其中,如果它不存在savedDocuments則添加標志saved: false。但是,當我登錄時console.log(doc),我的結果如下所示:
'0': {
_id: new ObjectId("635f3c3d79dffde472e69287"),
course_code: 'xxxxx',
name_of_document: 'doc 1',
name_of_s: 'COMPANY',
url: 'url',
uploadedBy: '[email protected]',
date: 2022-10-31T03:08:45.123Z,
id: '2ac3c'
},
'1': {
course_code: 'xxxxx',
name_of_document: 'doc 2',
name_of_s: 'COMPANY',
url: 'url',
uploadedBy: '[email protected]',
date: 2022-10-31T03:14:40.722Z,
id: 'fursr'
},
saved: false
}
如您所見,它只saved: false在那里添加一個標志,甚至不在doc根目錄中。那里有大約 10 個檔案,您在這里看不到,所以請放心,大約有 5 個具有匹配的 ID,您可以看到我通過日志記錄true或false也對其進行了測驗,并現場觀看了它的發生。我究竟做錯了什么?
uj5u.com熱心網友回復:
以下代碼構造了一個包含已保存檔案的 ID 的 Set,從而可以定期檢查給定 ID 是否已保存。
然后代碼列舉所有檔案并根據 Set 中的存在配置保存的屬性。
因此時間復雜度為 O(N)。
這是做你想做的嗎?
let allDocuments = [{ id: '0', name: 'foo' }, { id: '1', name: 'bar' }]
let savedDocuments = [{ id: '1' }]
const addSavedMetadata = (all, saved) => {
const savedSet = saved.reduce((acc, {id}) => acc.add(id), new Set)
all.forEach((d) => d.saved = savedSet.has(d.id))
return all
}
console.log(addSavedMetadata(allDocuments, savedDocuments))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523954.html
標籤:javascript节点.jsmongodb目的扩展语法
上一篇:可以定義與mongodbfind().toArray()一起使用的型別
下一篇:為什么windows上的curl命令會生成/bin/bash:line/:$'\r':commandnotfound錯誤?
