mirror of https://github.com/mongodb/mongo
62 lines
2.1 KiB
JavaScript
62 lines
2.1 KiB
JavaScript
// Test applyops upsert flag SERVER-7452
|
|
|
|
// @tags: [
|
|
// requires_non_retryable_commands,
|
|
// requires_fastcount,
|
|
//
|
|
// # applyOps uses the oplog that require replication support
|
|
// requires_replication,
|
|
// ]
|
|
|
|
var t = db.apply_ops2;
|
|
t.drop();
|
|
|
|
assert.eq(0, t.find().count(), "test collection not empty");
|
|
|
|
t.insert({_id: 1, x: "init"});
|
|
|
|
// alwaysUpsert = true
|
|
print("Testing applyOps with alwaysUpsert = true");
|
|
|
|
var res = db.runCommand({
|
|
applyOps: [
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 1}, o: {$set: {x: "upsert=true existing"}}},
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 2}, o: {$set: {x: "upsert=true non-existing"}}}
|
|
],
|
|
alwaysUpsert: true
|
|
});
|
|
|
|
assert.eq(true, res.results[0], "upsert = true, existing doc update failed");
|
|
assert.eq(true, res.results[1], "upsert = true, nonexisting doc not upserted");
|
|
assert.eq(2, t.find().count(), "2 docs expected after upsert");
|
|
|
|
// alwaysUpsert = false
|
|
print("Testing applyOps with alwaysUpsert = false");
|
|
|
|
res = db.runCommand({
|
|
applyOps: [
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 1}, o: {$set: {x: "upsert=false existing"}}},
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 3}, o: {$set: {x: "upsert=false non-existing"}}}
|
|
],
|
|
alwaysUpsert: false
|
|
});
|
|
|
|
// Because the CRUD apply-ops are atomic, all results are false, even the first one.
|
|
assert.eq(false, res.results[0], "upsert = false, existing doc update failed");
|
|
assert.eq(false, res.results[1], "upsert = false, nonexisting doc upserted");
|
|
assert.eq(2, t.find().count(), "2 docs expected after upsert failure");
|
|
|
|
// alwaysUpsert not specified, should default to true
|
|
print("Testing applyOps with default alwaysUpsert");
|
|
|
|
res = db.runCommand({
|
|
applyOps: [
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 1}, o: {$set: {x: "upsert=default existing"}}},
|
|
{op: "u", ns: t.getFullName(), o2: {_id: 4}, o: {$set: {x: "upsert=defaults non-existing"}}}
|
|
]
|
|
});
|
|
|
|
assert.eq(true, res.results[0], "default upsert, existing doc update failed");
|
|
assert.eq(true, res.results[1], "default upsert, nonexisting doc not upserted");
|
|
assert.eq(3, t.find().count(), "2 docs expected after upsert failure");
|