MongoDB $运算符

时间:2013-02-01 17:10:40

标签: mongodb mongoose

我有一个多级架构,我正在尝试使用$运算符在深层次的列表中添加元素。

我的架构看起来像这样,我正在尝试将对象添加到特定的cList:

var cSchema = mongoose.Schema({c:String,
    cList[
       {
         d1:String
         d2:String   
       }
    ]
});

var bSchema = mongoose.Schema({c:String,
    b:String,
    bList:[cSchema]
});


var aSchema = mongoose.Schema({
    a:String,
    aList:[bSchema]
}); 

我尝试运行以下命令,但count始终返回0:

Model.update( {_id:req.aid, "aList._id":req.params.bid, "bList.$.cList._id":req.params.cid}, 
              {'$addToSet' : {'aList.$.bList.$.cList': req.body}}, 
              function(err,count){

              }
);

1 个答案:

答案 0 :(得分:5)

$ operator用于更新运算符对象(update的第二个参数),查询选择器(第一个参数)。在查询选择器中,应该能使用aList.bList.cList._id,这样aList.$.bList.$.cList就可以与更新中嵌入的cList的第一个匹配元素相对应操作

修改

目前不支持嵌套位置($)运算符匹配。 This ticket显示了很久以前(2010年!)对这个功能的需求,但显然mongoDB中的低级代码并没有使这成为可能。似乎10gen希望在2.6版本中获得此功能。

您似乎必须单独查询和更新以使用当前架构实现此目标,或者可能将架构更改为更平坦。