【问题标题】:Edit object in sub of sub array in MongoDB编辑 MongoDB 中子数组的子对象
【发布时间】:2014-10-17 13:00:44
【问题描述】:

我需要更新 MongoDB 中的子数组。

我的文档:

{
    "_id" : ObjectId("5433d63cfafed42c083e0809"),
    "name" : "Flavio",
    "desc" : "feature", 
    "US" : [
        {
            "_id" : ObjectId("543ebeb473bc8d243d6b28dc"),
            "name" : "asdf",
            "desc" : "asdf", 
            "tasks" : [
                {
                    "_id" : ObjectId("544029257266e4841735cde8"),
                    "name" : "hello",
                    "date" : "16/10/2014 05:23:01 pm",
                    "author" : "5424ac37eb0ea85d4c921f8b"
                },
                {
                    "_id" : ObjectId("54410bf33561315021a29e2b"),
                    "name" : "lol",
                    "date" : "17/10/2014 09:30:43 am",
                    "author" : "5424ac37eb0ea85d4c921f8b"
                }
            ]
        }
    ]
}

我需要将一个新数组推送到 US.tasks._id = ObjectId("54410bf33561315021a29e2b") 的任务。

预期更新的任务:

{
   "_id" : ObjectId("54410bf33561315021a29e2b"),
   "name" : "lol",
   "date" : "17/10/2014 09:30:43 am",
   "author" : "5424ac37eb0ea85d4c921f8b"
   "points" : [
       {
           "count" : 10,
           "name": "pt"
       }
   ]
}

我正在尝试:

db.projects.update({
    "US.tasks": {
            $elemMatch: {"_id": ObjectId("544029257266e4841735cde8")}
    }
}, {
    $push: {"US.$.tasks": {"points" : []}} 
})


db.projects.update({
    "US.tasks": {
            $elemMatch: {"_id": ObjectId("544029257266e4841735cde8")}
    }
}, {
    $push: {"US.$.tasks.points": {"count" : 10, "name" : "pt"}} 
})

但新对象没有进入任务对象。

我如何解决这个问题并获得我想要的对象?

谢谢!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    还有另一种方法可以做到这一点

    db.projects.find(
    {
        "US.tasks": {$elemMatch: {"_id": ObjectId("544029257266e4841735cde8")}}
    }).forEach(function(item)
    {
        var us = item.US;    
    
        for (var i = 0; i < item.US.length; i++) 
            {            
                var tasks = item.US[i].tasks;
                for (var i2 = 0; i2 < tasks.length; i2++) 
                    {
                        var task = tasks[i2];
                        var id = task._id;                   
    
                        if(id == "544029257266e4841735cde8")
                        {
                            // add new filed
                            task.pointse = {};                        
                            break;
                        }                    
                    }
             }
    
        db.projects.save(item);         
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多