
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
mongodbext-relations
Advanced tools
mongodbext plugin that bring relations between collections
Starting from mongodbext-relations@2.x supports mongodb 3.6+ only
options:
relations (required) - hash of fields that should be embedded, should be specified in format: {field1: field1Options, field2: fieldOptions, ...}.
Each field options could have properties:
collection (required) - instance of mongodbext collection, that should be embeddedprojection - fields projection to embed ({_id: 1} by default`)key - "primary key" field (_id by default)embedded - function that used to create EmbeddedDocument instance (autogenerated by default)onDelete - action that should be done on embedded document deletion, available actions: 'restrict', 'cascade', 'unset', 'pull', null ('restrict' by default)onUpdate - action that should be done on embedded document updation, available actions: cascade, null ('cascade' by default)Example:
var MongoClient = require('mongodb').MongoClient;
var mongodbext = require('mongodbext');
var mongodbextRelations = require('mongodbext-relations');
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
var authorsCol = new mongodbext.Collection(db, 'authors');
var chaptersCol = new mongodbext.Collection(db, 'chapters');
var booksCol = new mongodbext.Collection(db, 'books');
booksCol.addPlugin(mongodbextRelations, {
relations: {
'author': {
collection: authorsCol,
projection: {_id: 1, name: 1}
},
'chapters.$': {
collection: chaptersCol,
projection: {_id: 1, title: 1}
}
}
});
var author = {
_id: 1,
name: 'John Doe',
age: 42
};
var chapters = [{
_id: 1,
title: 'Chapter 1',
page: 6
}, {
_id: 2,
title: 'Chapter 2',
page: 100
}];
var book = {
_id: 1,
title: 'Book',
author: 1,
chapters: [1, 2]
};
authorsCol.insertOne(author, function() {
chaptersCol.insertMany(chapters, function() {
booksCol.insertOne(book, function(err, book) {
console.log(book);
// {
// _id: 1,
// title: 'Book',
// author: { _id: 1, name: 'John Doe' },
// chapters: [
// { _id: 1, title: 'Chapter 1' },
// { _id: 2, title: 'Chapter 2' }
// ]
// }
chaptersCol.deleteOne({_id: 1}, function(err) {
console.log(err);
// [Error: Could not delete document from collection `chapters` because it is embedded to related collection `books` in the field `chapters` of document with _id=1]
});
});
});
});
});
skipping additional db requests with trustEmbeddedValue flag:
Relations plugin adds new trustEmbeddedValue option to the following methods:
insertOneinsertManyupdateOneupdateManyupsertOnereplaceOnefindOneAndUpdatefindOneAndReplacefindOneAndUpsertPassing trustEmbeddedValue: true will skip any additional mongodb requests for relations containig plain objects instead of identifiers. projection is still applied, though.
This logic has two important pitfalls:
trustEmbeddedValue: true with unsupported projection will cause an error to be thrown.projection are dropped.FAQs
mongodbext plugin that bring relations between collections
We found that mongodbext-relations demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.