创建测试数据时获取空数据集[MongoDB]

时间:2013-09-13 21:08:58

标签: mongodb

我在尝试填充数据时遇到了麻烦,因此我可以使用它来执行一些测试。

以下是我的代码:

for(i=0; i < 1000; i++){
    db.companies.insert({company: "Company"+i, employees: [""], CEO: ""})

    for(j=0; j < 50); j++){
        db.companies.update({"companies.company": "Company"+i}, {$push: {"companies.employees":
        "Employee"+Math.floor(Math.random()*500)}}, false, true)
    }

    db.companies.update({"companies.company": "Company"+i}, {$set: {"companies.CEO"
    : "CEO"+Math.floor(Math.random()*10)}})
}

这个想法是它创建了1,000家公司,并且每家公司都选择了500名可供选择的50名随机员工(我发现这种方法可能导致员工重复,这很好)。然后,它从10个可用的公司中选择一名CEO。

集合似乎已正确创建,公司名称将正确生成,但员工列表为空,CEO值为空。

是否根据动态名称({“companies.company”:“公司”+我})进行查询不允许,或者我只是搞砸了某个地方?

1 个答案:

答案 0 :(得分:3)

从您的查询中删除额外的companies应该有效,因为您的文档是结构化的:

{ 
    Company: "Company1",
    Employees: [],
    CEO: ""
}

使用以下语法:

db.companies.update({ "companies.company": "company1" }, ....)

你需要一份这样的文件:

{ 
    Companies: {     
        Company: "Company1",
        Employees: [],
        CEO: ""
    }
}

使用db.companies.mongoDBFunction,您已将该集合指定为companies

以下代码应该有效:

for(var i=0; i < 1000; i++){
    var name = "Company" + i;
    db.companies.insert({company: name, employees: [""], CEO: ""});

    for(var j=0; j < 50; j++){
        db.companies.update({"company": name }, {$push: {"employees":
        "Employee"+Math.floor(Math.random()*500)}}, false, true)
    }

    db.companies.update({"company": name}, {$set: {"CEO"
    : "CEO"+Math.floor(Math.random()*10)}})
}