mongodb按条件向文档数组添加元素

时间:2015-09-17 16:26:04

标签: mongodb

我的文档结构:

 "_id" : ObjectId("55e07b14bd1f3334f4d439ca"),
        "created" : ISODate("2015-08-28T15:15:32.251Z"),
        "userId" : 4790,
        "p2l" : [ 
            {
                "listId" : 31608,
                "status" : 25,
                "subscriptionDate" : ISODate("2015-09-16T12:33:03.893Z")
            },
            ...
        ]

我需要查找p2l.listId==value所有文档,然后在p2l数组中添加一个包含相同p2l.status但新listIdsubscriptionDate的新文档}值。

The example for finding this element:

        db.Profiles.find({ 
            "userId" : 4790, 
            "p2l" : { "$elemMatch" : { "listId" : { "$in" : [31617, 31614] } } } 
        })

如何进行更新呢?我认为它应该在一个查询中。     我使用C#Mongo Driver 2.0。     例如:     我有

"_id" : ObjectId("55e07b14bd1f3334f4d439ca"),
            "created" : ISODate("2015-08-28T15:15:32.251Z"),
            "userId" : 4790,
            "p2l" : [ 
                {
                    "listId" : 31608,
                    "status" : 25,
                    "subscriptionDate" : ISODate("2015-09-16T12:33:03.893Z")
                },
                ...
            ]

我需要

     "_id" : ObjectId("55e07b14bd1f3334f4d439ca"),
            "created" : ISODate("2015-08-28T15:15:32.251Z"),
            "userId" : 4790,
            "p2l" : [ 
                {
                    "listId" : 31608,
                    "status" : 25,
                    "subscriptionDate" : ISODate("2015-09-16T12:33:03.893Z")
                }, 
                {
                    "listId" : 31615,
                    "status" : 25,
                    "subscriptionDate" : ISODate("2015-09-17T14:35:13.855Z")
                },
                ...
            ]

我找到文件,其中userId = 4790和p2l.listId = 31608,然后使用new listId = 31615和subscriptionDate =' ISODate(" 2015-09-17T14)添加到此p2l新项目:35:13.855Z")',但旧的p2l.status = 25

1 个答案:

答案 0 :(得分:0)

使用$push运算符

更新它
db.Profiles.update({ 
    "userId" : 4790, 
    "p2l" : { "$elemMatch" : { "listId" : { "$in" : [31617, 31614] } } } 
    },{'$push:{'p21':{..your new document..}}})