MongoDB $运算符

Guy*_*and 0 mongoose mongodb

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

我的架构看起来像这样,我正在尝试将对象添加到特定的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]
}); 
Run Code Online (Sandbox Code Playgroud)

我尝试运行以下命令,但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){

              }
);
Run Code Online (Sandbox Code Playgroud)

Rya*_*ona 5

$操作是在更新操作对象(第二个参数来使用update),查询选择器(第一个参数).在查询选择器中,您应该能够使用aList.bList.cList._id,这将aList.$.bList.$.cList对应cList于更新运算符中嵌入的第一个匹配元素.

编辑:

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

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