summaryrefslogtreecommitdiff
path: root/jstests/core/query/dbref/ref.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/query/dbref/ref.js')
-rw-r--r--jstests/core/query/dbref/ref.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/jstests/core/query/dbref/ref.js b/jstests/core/query/dbref/ref.js
new file mode 100644
index 00000000000..0d1160482fc
--- /dev/null
+++ b/jstests/core/query/dbref/ref.js
@@ -0,0 +1,31 @@
+db.otherthings.drop();
+db.things.drop();
+
+var other = {s: "other thing", n: 1};
+db.otherthings.save(other);
+
+// Verify that the DBPointer prototype is not serializable
+assert.throws(function() {
+ db.things.save({a: DBPointer.prototype});
+});
+
+db.things.save({name: "abc"});
+x = db.things.findOne();
+x.o = new DBPointer("otherthings", other._id);
+db.things.save(x);
+
+assert(db.things.findOne().o.fetch().n == 1, "dbref broken 2");
+
+other.n++;
+db.otherthings.save(other);
+assert(db.things.findOne().o.fetch().n == 2, "dbrefs broken");
+
+db.getSiblingDB("otherdb").dropDatabase();
+var objid = new ObjectId();
+db.getSiblingDB("otherdb").getCollection("othercoll").insert({_id: objid, field: "value"});
+var subdoc = db.getSiblingDB("otherdb").getCollection("othercoll").findOne({_id: objid});
+
+db.mycoll.drop();
+db.mycoll.insert({_id: "asdf", asdf: new DBRef("othercoll", objid, "otherdb")});
+var doc = db.mycoll.findOne({_id: "asdf"}, {_id: 0, asdf: 1});
+assert.eq(tojson(doc.asdf.fetch()), tojson(subdoc), "otherdb dbref");