Skip to content

Instantly share code, notes, and snippets.

@lbeschastny
Last active May 27, 2018 18:54
Show Gist options
  • Save lbeschastny/87b2b20442d93c092a8bdffebce98511 to your computer and use it in GitHub Desktop.
Save lbeschastny/87b2b20442d93c092a8bdffebce98511 to your computer and use it in GitHub Desktop.
npm-debug.log*
node_modules/
const { MongoClient } = require('mongodb')
const { Collection } = require('mongodbext')
const relationsPlugin = require('mongodbext-relations')
exports.connect = async () => {
const client = await MongoClient.connect('mongodb://localhost:27017')
const db = client.db('mongodbext-relations-test')
const coll1 = new Collection(db, 'coll1')
const coll2 = new Collection(db, 'coll2')
coll2.addPlugin(relationsPlugin, {
relations: {
foreignKey: {
collection: coll1,
projection: { _id: 1 }
}
}
})
const coll3 = new Collection(db, 'coll3')
coll3.addPlugin(relationsPlugin, {
relations: {
foreignKey: {
collection: coll1,
projection: { _id: 1, foo: 1 }
}
}
})
return { client, db, coll1, coll2, coll3 }
}
const { EOL } = require('os')
const { connect } = require('./collections')
const test = async (coll1, coll2, coll3) => {
console.log('creating document in coll1')
const doc1 = await coll1.insertOne({
foo: 'bar'
})
console.log('document created:')
console.log(doc1)
console.log(EOL)
// valid foreignKey key
console.log('creating valid document in coll2')
const doc2 = await coll2.insertOne({
foreignKey: doc1
})
console.log('document created:')
console.log(doc2)
console.log(EOL)
// invalid foreignKey key: creation should fail
console.log('creating invalid document in coll2')
const doc3 = await coll2.insertOne({
foreignKey: 'does not exist'
})
console.log('document created:')
console.log(doc3)
console.log(EOL)
// valid foreignKey key
console.log('creating valid document in coll3')
const doc4 = await coll3.insertOne({
foreignKey: doc1
})
console.log('document created:')
console.log(doc4)
console.log(EOL)
// invalid foreignKey key: creation should fail
console.log('creating invalid document in coll3')
const doc5 = await coll3.insertOne({
foreignKey: 'does not exist'
})
console.log('document created:')
console.log(doc5)
console.log(EOL)
}
const main = async () => {
const { client, coll1, coll2, coll3 } = await connect()
try {
await test(coll1, coll2, coll3)
} catch (err) {
console.error(err)
} finally {
client.close()
}
}
main()
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"bson": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz",
"integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ=="
},
"is-plain-object": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz",
"integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=",
"requires": {
"isobject": "3.0.1"
}
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
"mhook": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mhook/-/mhook-1.0.1.tgz",
"integrity": "sha1-C6igyiARIlgzA9tKsdDi/5jytUw="
},
"mongodb": {
"version": "3.1.0-beta4",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.0-beta4.tgz",
"integrity": "sha512-nJAK59fFlMWTdEJaTyGp3HeerkIahnupoMNjbszPJVnO63/36aFnlWHqpYrrJwj9GKlmb47YWBIvNo6fdrUL4Q==",
"requires": {
"mongodb-core": "3.1.0-beta4"
}
},
"mongodb-core": {
"version": "3.1.0-beta4",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.0-beta4.tgz",
"integrity": "sha512-aiwUKBGmFZwBx4CdC1iK5kjZyk0zhDxQ0edRtpTZUkk1jyWkdzYd6GEA6wMl7O6ZX/dOiFM2ujkrUR7+vkqJPw==",
"requires": {
"bson": "1.0.6",
"require_optional": "1.0.1",
"saslprep": "1.0.0"
}
},
"mongodbext": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/mongodbext/-/mongodbext-2.2.4.tgz",
"integrity": "sha1-txpu9zRRfJJl9JlTatKu9Gtu5VE=",
"requires": {
"is-plain-object": "2.0.3",
"mhook": "1.0.1"
}
},
"mongodbext-relations": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/mongodbext-relations/-/mongodbext-relations-1.0.9.tgz",
"integrity": "sha1-jbiKpyFO8X/P7d/12qmQyCiSsKQ="
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
"requires": {
"resolve-from": "2.0.0",
"semver": "5.5.0"
}
},
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"saslprep": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.0.tgz",
"integrity": "sha512-5lvKUEQ7lAN5/vPl5d3k8FQeDbEamu9kizfATfLLWV5h6Mkh1xcieR1FSsJkcSRUk49lF2tAW8gzXWVwtwZVhw==",
"optional": true
},
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
}
}
}
{
"author": {
"name": "Leonid Beschastny",
"email": "lbeschastny@gmail.com",
"url": "https://github.com/lbeschastny"
},
"dependencies": {
"mongodb": "^3.1.0-beta4",
"mongodbext": "^2.2.4",
"mongodbext-relations": "^1.0.9"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment