gpt4 book ai didi

javascript - 用对象列表替换字符串列表 - mongoDB

转载 作者:行者123 更新时间:2023-12-02 15:43:49 24 4
gpt4 key购买 nike

我有一个 mongo 对象,当前其中有一个字符串列表,请参见下文。

{
"_id" : "One-123-1439251200000",
"string_list" : [
"123",
"321"
],
}

我在创建一个 mongo 脚本时遇到问题,该脚本会将此字符串列表转换为对象列表(该对象列表中的属性之一是每个字符串)。见下文...

{
"_id" : "One-123-1439251200000",
"detailed_string_list" : [
{
"id" : "123",
"label" : ""
},
{
"id" : "321",
"label" : ""
},
}

有人可以帮我创建这个小脚本吗?我试图查看 MongoDB manual但它没有做我想要的事情(可能做错了什么。非常感谢。

编辑。我正在迭代一堆记录,并且正在尝试

.forEach(function(doc) {

_id字段是唯一的Id,我不需要更改

最佳答案

作为“更新”操作,然后使用 "Bulk"操作将对您有很大帮助:

var bulk = db.collection.initializeOrderedBulkOp(),
count = 0;

db.collection.find({ "string_list": { "$exists": true } } ).forEach(function(doc) {
bulk.find({ "_id": doc._id }).updateOne({ "$unset": { "string_list": "" } });

doc.string_list.forEach(function(list) {
bulk.find({ "_id": doc._id }).updateOne({
"$push": {
"detailed_string_list": {
"_id": list,
"label": ""
}
}
});
});
count++;

if ( count % 200 == 0 ) {
bulk.execute();
var bulk - db.collection.initializeOrderedBulkOp();
}
]);

if ( count % 200 != 0 )
bulk.execute();

作为一般的“变换”,那么你可以使用$map但不可能在该过程中使用生成的值注入(inject)“_id”等字段,但您可以只使用当前值或常量。不过,您最好在客户端代码中执行此操作,例如( javascript 和 shell ),因为这样通常会更有效:

   var results = \\ general .find() cursor result
var counter = 0;

results = results.map(function(result){
result.detailed_string_list = results.string_list.map(function(list) {
return { "_id": list, "label": "" };
});
delete result.string_list;
return result;
});
<小时/>

但是当然,如​​果您的 MongoDB 版本低于 2.6,那么您无法使用批量操作,而只需要在循环中使用基本更新:

db.collection.find({ "string_list": { "$exists": true } } ).forEach(function(doc) { 
db.collection.update({ "_id": doc._id },{ "$unset": { "string_list": "" } });

doc.string_list.forEach(function(list) {
db.collection.update(
{ "_id": doc._id },
{
"$push": {
"detailed_string_list": {
"_id": list,
"label": ""
}
}
}
);
});
]);

关于javascript - 用对象列表替换字符串列表 - mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com