如何过滤集合中的嵌套文档并更新字段?

时间:2014-03-25 17:05:22

标签: c# mongodb mongodb-.net-driver

我有一个名为Jobs的集合。

[
    {
        _id : 1
        content:[
            {
                _id : 1,
                stuff: "A" 
            },
            {
                _id : 2,
                stuff: "B" 
            }
        ]
    },
    {
        _id : 2
        content:[
            {
                _id : 1,
                stuff: "X" 
            },
            {
                _id : 2,
                stuff: "Y" 
            }
        ]
    },
    ...
]

我想将stuff字段更新为Z 2和job._id = content._id = 2

我尝试过这样的事情:

var collection = database.GetCollection("Jobs");
var query = Query.EQ("_id", jobId);
var job = collection.FindOneAs<Job>(query);

var con = job.content.FirstOrDefault(x => x._id == contentIndex);
if (con != null) con.stuff = "Z";
collection.Save(job);

那么如何使用这样的单个查询来更新嵌套文档呢?

collection.Update(Query.EQ("content._id", contentIndex), Update.Set("content.$.stuff", "Z"));

提前致谢!

1 个答案:

答案 0 :(得分:0)

在shell中,您可以使用positional运算符并使用如下查询更新元素:

db.jobs.update({"_id": 2, "content._id":2}, {"content.$.stuff", "Z"});

同一个查询可以翻译成C#(我不熟悉)。