javascript - MongoDB/Mongoose - 仅当特定字段唯一时才将对象添加到对象数组

标签 javascript node.js mongodb mongoose subdocument

所以我的 MongoDB 文档中有一个嵌套的对象数组,我想仅在特定字段(在本例中为 eventId)唯一时才向该数组添加一个新对象。我的问题与 this post 非常相似,只是我似乎无法让该解决方案适用于我的情况。

这是文档 (UserModel) 的样子:

{
  "portal" : {
    "events" : [ 
      {
        "important" : false,
        "completed" : false,
        "_id" : ObjectId("5c0c2a93bb49c91ef8de0b21"),
        "eventId" : "5bec4a7361853025400ee9e9",
        "user_notes" : "My event note"
      },
      ...and so on
    ]
  }
}

这是我的(迄今为止不成功的)Mongoose 操作:

UserModel.findByIdAndUpdate(
  userId,
  { "portal.events.eventId": { $ne: req.body.eventId } },
  { $addToSet: { "portal.events": req.body } },
  { new: true }
);

基本上我正在尝试使用 '$ne' 检查字段是否唯一,然后使用 '$addToSet'(或 '$push' ,我相信在这种情况下它们在功能上是等效的)以添加新对象。

谁能指出我正确的方向?

干杯, 加布

最佳答案

如果您查看 documentation在您的方法中,您会发现传递的参数顺序不正确。

findByIdAndUpdate(id, update, options, callback)

我会使用 update 来代替你的 idportal.events.eventId": { $ne: req.body.eventId } 初始过滤器的一部分,后跟 $addToSet: { "portal.events": req.body }

这些行中的一些东西:

UserModel.update(
  { 
     "_id": mongoose.Types.ObjectId(userId), 
     "portal.events.eventId": { $ne: req.body.eventId }
  },
  { $addToSet: { "portal.events": req.body } },
  { new: true }
);

关于javascript - MongoDB/Mongoose - 仅当特定字段唯一时才将对象添加到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53687212/

相关文章:

windows - MongoDB "The default storage engine ' wiredTiger' 不适用于此版本的 mongod "+ "..no/data/db 文件夹..”

mongodb - 使用 mongoimport 将 CSV 读入嵌套结构?

javascript - 如何在nodejs和mongodb中从最后一个数字自动递增

javascript - IE7 JavaScript 问题

angularjs - Jade 不适用于 Angular Routing

node.js - 如何正确使用NodeJS中的回调函数

node.js - 在一个连接中从 node.js 向多个用户发送苹果推送通知

javascript - 我如何将动态日期传递给我的 asp.net MVC 应用程序中的 Javascript

javascript - 为什么我的外部 javascript 方法说它未定义?

javascript - 在 HTML5 Canvas 上从图像中绘制字体