更新
主题是重复的,但由于我要求流星语法,我已经从其他主题中取了示例并在此处为您翻译:
// $ 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:我需要批量生产,因为我之前正在做其他工作,但无论如何都可能需要这样做。