node.js - 猫鼬批量执行创建,如果不存在,否则更新不包含时间戳
问题描述
编辑:
我知道,setDefaultsOnInsert
但我似乎无法弄清楚如何通过该选项...
activity.notify.forEach( user_id => {
query = { 'notification._id': activity._id, user_id, type: "replied to an idea you're subscribed to" }
update = { $set: { notification: activity }, $addToSet: { user_details: user_data } }
options = { setDefaultsOnInsert: true }
bulk.find( query ).upsert().update( update, options )
} )
目前正在构建一个通知系统。
这是我的代码目前的样子:
let bulk = Notification.collection.initializeUnorderedBulkOp()
activity.notify.forEach( user_id => {
query = { 'notification._id': activity._id, user_id, type: "replied to an idea you're subscribed to" }
update = { $set: { notification: activity }, $addToSet: { user_details: user_data } }
bulk.find( query ).upsert().update( update )
} )
bulk.execute()
.then( r => console.log( 'r', r ) )
.catch( err => console.log( 'bulk exec err ', err.writeErrors[ 0 ] ) )
代码的作用是查看一个名为notify
contains的数组user_ids
。
然后它会查看是否user_id
已经存在类似的通知。如果是这样,请将其更新$addToSet
为 array user_details
。
这种方法的问题是它没有时间戳。在我的模型中,我有一条线:timestamps: true
但是由于我正在更新一些文档,它们不会通过以下文档的正常实例化:new Notification()
有没有办法自动包含这些,或者我必须创建一些辅助函数来生成createdAt
和updatedAt
这对我不起作用
解决方案
推荐阅读
- ionic3 - Ionic 3 - 带水平滚动的无限滚动
- r - 如何在闪亮的应用程序中选择两个日期时间之间的数据?
- oracle - Oracle连接表,同时将参数从一个表传递到返回表的函数
- streaming - 广播解决方案/编码器/解码器
- spring-saml - 成功重定向到仪表板后,Spring SAML 有无限循环
- angular - 加密Angular中routerlink参数的解密方法
- c# - Entity Framework 6 正在重新加载(重新延迟加载)以前使用 include() 水合的子集合
- python - 条件打印格式
- javascript - iOS设备上的微小MCE编辑器高度问题
- elasticsearch - 使用 elasticsearch 回退到 null 上的另一个字段