Upsert不适用于updateOne bulkWrite v3.4

时间:2017-12-15 12:00:35

标签: node.js mongodb

我试图批量写一些更新,除了upsert之外的所有内容都有效 我的代码完美地更新了所有项目,并且没有给出任何错误 这里的问题是updateOne的批量插入没有插入。

(这是我的代码未经测试和缩短的示例,因此您可能会发现一些语法错误。希望您明白这一点。)

async function insert(items) {
    const ops = items.map(item => ({
        updateOne: {
            filter: {
                id: item.id,
                country: item.country,
            },
            update: { $set: item },
            upsert: true
        }
    }));

    return await db.collection.bulkWrite(ops);
}

insert([{
    id: '123',
    country: 'uk',
    email: 'test@test.com'
}]);

上面的代码段不会插入缺失的项目,但会正确更新其他内容。

我正在使用node version 6.6.0mongodb version v3.4.10,因此对于3.4(https://docs.mongodb.com/v3.4/reference/method/db.collection.bulkWrite/)的mongodb文档,在3.2版本中,bulkwrite是 New。

此代码段来自bulkWrite的MongoDB 3.4文档。

db.collection.bulkWrite( [
   { updateOne :
      {
         "filter" : <document>,
         "update" : <document>,
         "upsert" : <boolean>
      }
   }
] )

这是同一文档中的一个例子。

{
    updateOne: {
        "filter": { "char": "Eldon" },
        "update": { $set: { "status": "Critical Injury" } }
    }
}

我已经尝试使用完全相同的数据在mongo终端界面直接进行正常更新,并正确地为该项目添加内容。

db.collection.update({ id: '123', country: 'uk' }, { $set: { id: '123', country: 'uk', email: 'test@test.com' } }, { upsert: true });

1 个答案:

答案 0 :(得分:1)

<?php
                $yearArray = range(2015, 2050);
                    ?>
                    Year
                    <select name="year" id="year">
                    <option value="">Select Year</option>
                    <?php
                    foreach ($yearArray as $year) {

                    $selected = ($year == 2017) ? 'selected' : '';
                    echo '<option '.$selected.' value="'.$year.'">'.$year.'</option>';
                    }
                    ?>
                    </select>

$ set 按语法预期 {id:item.id,country:item.country} ,而不仅仅是 id:item.id,country:item .country 正在通过。