perl,mongodb 2.4.9,perl MongoDB 0.702.1
当我执行
$collection->batch_insert(\@array)
时,它工作正常,但是在这种情况下有什么办法可以做 upsert 吗?
perl,mongodb 2.4.9,perl MongoDB 0.702.1
当我执行
$collection->batch_insert(\@array)
时,它工作正常,但是在这种情况下有什么办法可以做 upsert 吗?
我不确定你为什么要这样做。如果您的匹配标准中有现有文档,您将破坏性地覆盖它们。
不过,对于 v1.0.0 或更高版本的驱动程序(以及 2.6 或更高版本的 mongod),如果您提前添加 OID,则可以执行以下操作:
use v5.10;
use strict;
use warnings;
use MongoDB;
use MongoDB::OID;
my $mc = MongoDB->connect;
my $coll = $mc->ns("test.foo");
$coll->drop;
my @docs = map { { _id => MongoDB::OID->new, x => $_ } } 1 .. 10;
# insert half as normal
my $res = $coll->insert_many( [ map { $docs[ 2 * $_ + 1 ] } 0 .. 4 ] );
say "Inserted " . $res->inserted_count . " docs";
# upsert whole batch
$res = $coll->bulk_write( [
map { ( replace_one => [ { _id => $_->{_id} }, $_, { upsert => 1 } ] ) }
@docs
] );
say "Matched " . $res->matched_count . " docs";
say "Upserted " . $res->upserted_count . " docs";
当我运行它时,我得到:
Inserted 5 docs
Matched 5 docs
Upserted 5 docs