如何将文档推送到嵌套在另一个数组中的数组中?

How to push a document in an array nested in another array?

这是我的问题:我有一个文档(我们称之为根),其中包含另一个文档数组(棒),另一个文档数组(叶)。

或者简单地说:root{ stickChain[leaveschain1[ leaf1, leaf2], leaveschain2[ leaf1, leaf2] ]}

我可以访问 root _id、stick _id 或识别每个文档所需的任何内容。

基本上,到目前为止,我取得的最佳结果是,在创建我的树叶文档时,将存储在同一级别,或者换句话说,我已经创建了一个树叶数组根.

我在 javascript 工作并使用 mongoose

这是我用过的线路:

db.collection('root').findOneAndUpdate({ _id: root.id, "stick._id":expTemp._id },{stickChain:{$push: {"leavechain.$": leaf}}})

我这给了我这个结果:root{ leavesChain[leaf1,leaf2], stickchain[1,2,3] }

I've come across something new to me(因为 Mongodb 3.6 有一种处理数组数组的新方法),这是我尝试过的方法:

  try{  db.collection('root').findOneAndUpdate(
        { _id: root.id, "stick._id":expTemp._id },
        {$push: {"stickChain.$[xpc].leavesChain.$[qac]": leaf}},
        { arrayFilters: [ { "xpc._id": user._id } , { "qac._id": expTemp._id } ]})}

更新

 try{  db.collection('root').findAndModify(

        {$push: {"root.$[cv].stickChain.$[xpc].leavesChain.$[qac]": leaf}},
        { arrayFilters: [ {"cv._id":user.cv} ,{ "xpc._id": user._id } , { "qac._id": expTemp._id } ],
        upsert:true})
        .catch(error => console.error(error))

    }catch{}

这给了我一种新的错误:MongoError:必须指定更新或删除=true

问题是我不熟悉该怎么做,但我知道我想做什么:我想在 [=42= 中获取的文档中的特定数组中插入一个“叶子” ].也许不是最好的做法,所以欢迎任何提示:)

我是这样拆分我的 dument 的:

  • root[stickChain _id]
  • stick[leavesChain[叶子]]

感谢 Andrey Popov 的解释