批量创建/添加/更新数组子文档

时间:2016-04-08 01:10:08

标签: arrays mongodb meteor bulk

更新

主题是重复的,但由于我要求流星语法,我已经从其他主题中取了示例并在此处为您翻译:

// $ set匹配现有

bulk.update({ "name": "SweetTown", "residents.name": "Bob" },{"$set": { "residents.$.reputation": 30 }});

// $ push不存在的地方

bulk.update({ "name": "SweetTown", "residents.name": { "$ne": "Bob" } },{"$push": { "residents": { "name": "Bob", "reputation": 30 } }});

//尝试仅插入

bulk.upsert({ "name": "SweetTown" },{"$setOnInsert": {"residents": [{ "name": "Bob", "reputation": 30 }]}})

我有一个简单的架构

{"_id","user_name":name}

我想找到一种方法:

创建"选项数组"如果它不存在,那么结果是:

{"_id","user_name":name,"options":[]}

如果数组已经存在,只需使用文档

添加它
{"_id","user_name":name,"options":[{"1":10}]}

如果文件(" 1"在前面的例子中)已经存在,只需更新文件

{"_id","user_name":name,"options":[{"1":30}]}

如果文件("编号")不存在,请添加数组

{"_id","user_name":name,"options":[{"1":30},{"2":"50"}]}

我一直在尝试使用批量在多个查询中执行此操作,但它从未像我希望的那样真正工作:

var obj = {user_name:"test",options:[{"1":10}]};
var bulk = Users.rawCollection().initializeUnorderedBulkOp();
 // supposed to add the balance array + the first option OR just the first option if balance already exist but it keeps on appending option every time because i have no selector for it
bulk.upsert( { "user_name" : obj.user_name }, { $push : obj.options});
// So i try this :
bulk.update({"user_name": obj.user_name},{ $set:{"options.$.1": obj.options[0]} }); // doesn't work : add  "xnumber" to position #1 of the  options array

最近我一直尝试将addtoset + push与.find()。update()结合使用但尚未成功。

有人可以帮忙吗?

Ps:我需要批量生产,因为我之前正在做其他工作,但无论如何都可能需要这样做。

0 个答案:

没有答案