MongoDB 查詢只在不存在的時候新增時間戳


為此,請在 MongoDB 中使用 upsert 和 multi −

Upsert − 如果設為 true,當沒有任何文件匹配查詢條件時,建立一個新文件。預設值為 false,在找不到匹配項時不插入新文件。

Multi − 如果設為 true,更新滿足查詢條件的多條文件。如果設為 false,則更新一條文件。預設值為 false。

讓我們建立一個帶有文件的集合 -

> db.demo479.insertOne({"DueDate":new ISODate("2020-01-10"),"Name":"Chris"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e820733b0f3fa88e2279094")
}
> db.demo479.insertOne({"Name":"David"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e820748b0f3fa88e2279095")
}
> db.demo479.insertOne({"DueDate":new ISODate("2019-12-31"),"Name":"Bob"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e82075fb0f3fa88e2279096")
}
> db.demo479.insertOne({"Name":"Carol"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e820767b0f3fa88e2279097")
}

在 find() 方法的幫助下顯示集合中的所有文件 −

> db.demo479.find();

這將產生以下輸出 -

{ "_id" : ObjectId("5e820733b0f3fa88e2279094"), "DueDate" : ISODate("2020-01-
10T00:00:00Z"), "Name" : "Chris" }
{ "_id" : ObjectId("5e820748b0f3fa88e2279095"), "Name" : "David" }
{ "_id" : ObjectId("5e82075fb0f3fa88e2279096"), "DueDate" : ISODate("2019-12-
31T00:00:00Z"), "Name" : "Bob" }
{ "_id" : ObjectId("5e820767b0f3fa88e2279097"), "Name" : "Carol" }

以下是僅在不存在時新增時間戳欄位的查詢 -

> db.demo479.update({DueDate:{$exists:false}}, {$set : {"DueDate":new Date}}, {upsert:false,
multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

在 find() 方法的幫助下顯示集合中的所有文件 -

> db.demo479.find();

這將產生以下輸出 -

{ "_id" : ObjectId("5e820733b0f3fa88e2279094"), "DueDate" : ISODate("2020-01-
10T00:00:00Z"), "Name" : "Chris" }
{ "_id" : ObjectId("5e820748b0f3fa88e2279095"), "Name" : "David", "DueDate" :
ISODate("2020-03-30T14:52:29.656Z") }
{ "_id" : ObjectId("5e82075fb0f3fa88e2279096"), "DueDate" : ISODate("2019-12-
31T00:00:00Z"), "Name" : "Bob" }
{ "_id" : ObjectId("5e820767b0f3fa88e2279097"), "Name" : "Carol", "DueDate" :
ISODate("2020-03-30T14:52:29.656Z") }

更新時間: 2020 年 5 月 11 日

234 次觀看

開始你的職業生涯

完成課程獲得認證

開始學習
廣告