将数组插入现有数组Mongodb

时间:2018-03-07 10:01:07

标签: mongodb reactjs meteor

如何使用MongoDB / Meteor将数组添加到现有数组中?这是数据库的结构。

enter image description here

我想在[depute]中添加一个新数组,而不是在外部添加新数组,就像现在一样。

到目前为止,这是代码。

import os
for path,dir,file in os.walk("."):
    for fileNames in file:
        if fileNames.endswith("json"):
            fileName = str(os.path.join(path,fileNames))
            print(fileName)

它在[depute]旁边添加了一个新数组[votes],而不是在[depute]中。

任何提示?

2 个答案:

答案 0 :(得分:1)

您可以使用以下事实:可以使用索引作为属性来引用javascript数组。

因此,您使用object.property变量创建loi模式:

const selector = `votes.${loi}`;

哪个会为loi===0选择器"votes.0创建。

代码示例:

Meteor.methods({
    'votes.insert': function (depute, loi, choix){
        console.log('from votes.insert', depute, loi, choix)
        const selector = `votes.${loi}`;
        return Deputies.update(dpute, { $push: { [selector]: choix } });
    },
});

示例输出:

votes === []choix === 5将导致loi === 0中的votes: [ [ 5 ] ]

votes === [[1]]choix === 5将导致loi === 0中的votes: [ [ 1, 5 ] ]

votes === [[1]]choix === 5将导致loi === 1中的votes: [ [ 1 ], [ 5 ] ] }

答案 1 :(得分:0)

您使用$push的方式无法按预期工作。您需要指定要将某些内容推送到depute,而是推进votes,因此只需在父对象上创建votes

您正在寻找的语法是:

// create your votes array using your args loi & choix up here:
const votes = [ ... ]

// push the votes array in to depute here:
Deputies.update(depute,
    {$push: {depute: votes}
);