0

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

我的架构看起来像这样,我正在尝试将对象添加到特定的 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){

              }
);
4

1 回答 1

5

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

编辑:

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

看起来您必须单独查询和更新才能使用当前架构实现此目的,或者可能将架构更改为更平坦。

于 2013-02-01T18:19:59.243 回答