如何使用meteor将对象数组插入mongodb?

时间:2014-07-07 21:01:27

标签: mongodb meteor

在尝试插入对象数组时,如何在没有添加无关字符的情况下获得干净插入。如果我从mongodb shell手动执行插入操作,我会得到预期的结果,否则它似乎无法正常工作。

我想要实现的是mongodb shell的结果:

db.test.insert([{name:"john"},{name:"jane"}]);

产生:

db.test.find()
{ "_id" : ObjectId("53bb0768dc2469c1f440a3c2"), "name" : "john" }
{ "_id" : ObjectId("53bb0768dc2469c1f440a3c3"), "name" : "jane" }

但是我没有那么做,所以我使用下面的代码片段来测试几种插入对象数组的方法,希望找到合适的组合:

test = new Meteor.Collection("test");
a = new Array();
a.push({name:"john"});
a.push({name:"jane"});
console.log(a);
test.insert(a);  
console.log(a.toString());
test.insert(a.toString());  
console.log(JSON.stringify(a));
test.insert(JSON.stringify(a));
test.insert([{name:"john"},{name:"jane"}]);
test.insert([{"name":"john"},{"name":"jane"}]);

我在控制台中得到了什么:

[ { name: 'john' }, { name: 'jane' } ]
[object Object],[object Object]
[{"name":"john"},{"name":"jane"}]

我在数据库中获得了什么: db.test.find()

{ "0" : { "name" : "john" }, "1" : { "name" : "jane" }, "_id" : "SYkv79XLNQsWgkYmw" }
{ "0" : "[", "1" : "o", "2" : "b", "3" : "j", "4" : "e", "5" : "c", "6" : "t", "7" : " ", "8" : "O", "9" : "b", "10" : "j", "11" : "e", "12" : "c", "13" : "t", "14" : "]", "15" : ",", "16" : "[", "17" : "o", "18" : "b", "19" : "j", "20" : "e", "21" : "c", "22" : "t", "23" : " ", "24" : "O", "25" : "b", "26" : "j", "27" : "e", "28" : "c", "29" : "t", "30" : "]", "_id" : "SiQ3ZpGfeBqj4mXB2" }
{ "0" : "[", "1" : "{", "2" : "\"", "3" : "n", "4" : "a", "5" : "m", "6" : "e", "7" : "\"", "8" : ":", "9" : "\"", "10" : "j", "11" : "o", "12" : "h", "13" : "n", "14" : "\"", "15" : "}", "16" : ",", "17" : "{", "18" : "\"", "19" : "n", "20" : "a", "21" : "m", "22" : "e", "23" : "\"", "24" : ":", "25" : "\"", "26" : "j", "27" : "a", "28" : "n", "29" : "e", "30" : "\"", "31" : "}", "32" : "]", "_id" : "kKRiR8NjNJefBYRya" }
{ "0" : { "name" : "john" }, "1" : { "name" : "jane" }, "_id" : "RBrvkrw5xZaEGdczF" }
{ "0" : { "name" : "john" }, "1" : { "name" : "jane" }, "_id" : "2cfWJqHY4aJ6yF68s" }

我期待一个简单的测试。插入(a)'给我我想要的东西,但它包括数组索引。如何在没有数组索引的情况下构建一个从流星插入mongodb的对象数组? Stringify似乎构建了一个干净的序列化阵列,但显然我不知道如何做到这一点?这样做的目的是让我可以在内存中构建一个复杂的对象数组并进行批量插入。

2 个答案:

答案 0 :(得分:1)

Meteor只允许您将根级文档存储为对象,如果您为其提供数组,它将尝试将其转换为对象。这就是为什么你得到这个奇怪的结果。您必须调整文档以将数组存储为根文档的一部分

test = new Meteor.Collection("test");
a = new Array();
a.push({name:"john"});
a.push({name:"jane"});

var doc = {
    names: a
}

test.insert(a);

无法将文档存储为[]。

答案 1 :(得分:0)

Template.first.rendered=function(){
    var a=[];
    a.push({name:"rahul"});
    a.push({name:"vidu"});
    Meteor.call("array", a , function(error,result){
    });
};