mongodb已经存在的数组添加了另一个值查询

时间:2019-06-12 11:19:48

标签: mongodb mongoose mongodb-query

我有这样的通知点击表:

{
    "_id" : ObjectId("5d00d4e1d720cc4cb1b24566"),
    "createdOn" : ISODate("2019-06-12T10:33:05.866Z"),
    "notification_center_id" : [ 
        ObjectId("5c59343523f05e2ff13938d6")
    ],
    "user_id" : ObjectId("5bc5dc03f6d24d29077dd362"),
    "__v" : 0
}

我想检查user_id“ 5bc5dc03f6d24d29077dd362”是否已经存在,然后在已经存在的记录中添加另一个notification_center_id。

像这样

 {
    "_id" : ObjectId("5d00d4e1d720cc4cb1b24566"),
    "createdOn" : ISODate("2019-06-12T10:33:05.866Z"),
    "notification_center_id" : [ 
        ObjectId("5c59343523f05e2ff13938d6"),
        ObjectId("5c5c4610c6d91403f38eda52")
    ],
    "user_id" : ObjectId("5bc5dc03f6d24d29077dd362"),
    "__v" : 0
 }

我想查询首先检查用户ID是否存在,然后在notification_center_id字段中添加另一个通知记录。 如果用户不存在,那么我想在集合中添加另一个记录 如果没有插入notification_center_id,则这里还有一个条件重复。如果存在,则不添加。 请帮助我。

2 个答案:

答案 0 :(得分:1)

db.getCollection('test').update(
    {"user_id" : ObjectId("5bc5dc03f6d24d29077dd362")},
    {"$push" : {"notification_center_id" : new ObjectId()}}
)

在您的问题中,您没有提到如果user_id不存在该怎么办。所以在这种情况下什么也不做。

发表评论后

db.getCollection('test').update(
    {"user_id" : ObjectId("5c59343523f05e2ff13938d6")},
    {
        "$push" : {"notification_center_id" : new ObjectId()},
        "$setOnInsert" : {"createdOn" : new ISODate(), "__v" : 0}
    },
    {"upsert" : true}
)

答案 1 :(得分:0)

$ addToSet更新运算符用于将元素附加到数组,并保留值在数组中的唯一性。

db.notifications.update({"_id" : ObjectId("5d00d4e1d720cc4cb1b24566")}
, { $addToSet: { notification_center_id: new ObjectId() } })