【问题标题】:how do I insert an array of objects to mongodb using meteor?如何使用流星将对象数组插入 mongodb?
【发布时间】:2014-08-28 11:31:09
【问题描述】:

在尝试插入对象数组时,如何在不添加无关字符的情况下获得干净的插入。如果我从 mongodb shell 手动进行插入,我会得到预期的结果,否则它似乎不起作用。

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

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

产生:

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

但我不明白,所以我使用下面的代码 sn-p 测试了几种插入对象数组的方法,希望找到正确的组合:

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" }

我希望一个简单的“test.insert(a)”能给我想要的东西,但它包含数组索引。如何在没有数组索引的情况下构建一个对象数组以从流星插入 mongodb? Stringify 似乎构建了一个干净的数组序列化,但显然我只是不知道该怎么做?这样做的目的是让我可以在内存中构建一个复杂的对象数组并进行批量插入。

【问题讨论】:

    标签: mongodb meteor


    【解决方案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);
    

    无法将文档存储为 []。

    【讨论】:

    • 我不确定我是否理解。如果我这样做: db.test.insert([{name:"john"},{name:"jane"}]);这与我在代码中所做的完全一样,它可以在 shell 中工作,但不能从代码中工作?
    • 我的理解是批量插入确实允许[]。这不是批量插入工作的要求吗?
    • 哦,我明白你在做什么了。不幸的是,meteor 还没有像 mongo 那样支持批量插入
    • 这真是太糟糕了。看起来我发现了一个类似的问题,但不是一个很好的解决方法。似乎它已经接近实施了,我想知道阻碍是什么。 stackoverflow.com/questions/19757434/…
    • @sday 它的问题是检查每个客户端是否被允许/拒绝,无论如何您都必须检查每一个,因此批量插入没有真正意义。在服务器端,您可以使用诸如流星暴露之类的东西来让您访问 mongodb 方法以直接进行批量插入。
    【解决方案2】:
    Template.first.rendered=function(){
        var a=[];
        a.push({name:"rahul"});
        a.push({name:"vidu"});
        Meteor.call("array", a , function(error,result){
        });
    };
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 2016-11-05
      相关资源
      最近更新 更多