MongoDB
Available Procedures
signature |
---|
apoc.mongo.aggregate(uri, pipeline, $config) yield value - perform an aggregate operation on mongodb collection |
apoc.mongo.count(uri, query, $config) yield value - perform a count operation on mongodb collection |
apoc.mongo.find(uri, query, $config) yield value - perform a find operation on mongodb collection |
apoc.mongo.delete(uri, query, $config) - delete the given documents from the mongodb collection and returns the number of affected documents |
apoc.mongo.insert(uri, documents, $config) yield value - inserts the given documents into the mongodb collection |
apoc.mongo.update(uri, query, update, $config) - updates the given documents from the mongodb collection and returns the number of affected documents |
Install Dependencies
The Mongo procedures have dependencies on a client library that is not included in the APOC Extended library.
This dependency is included in apoc-mongodb-dependencies-5.21.0-all.jar, which can be downloaded from the releases page.
Once that file is downloaded, it should be placed in the plugins
directory and the Neo4j Server restarted.
Field description
-
uri
: The connection String URI, with schememongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]]/databaseName.collectionName[?options]
. Note that this uri must necessarily have the database name and (if thecollection
config parameter is not explicit) the collection name (for examplemongodb://user:pass@localhost:27017/myDb.myCollection?authSource=admin
) -
query
: query parameter map (can be a map or a json string) -
update
: update parameter map (only forapoc.mongo.update
) -
documents
: the documents to insert (only forapoc.mongo.insert
) -
config
: see below
Configuration parameters
The procedures support the following config parameters:
name | type | default | description |
---|---|---|---|
extractReferences |
|
false |
If true and a field contains an |
objectIdAsMap |
|
true |
If true extract the |
project |
|
empty |
The projection parameters (can be a map or a json string) |
sort |
|
empty |
The sort parameters (can be a map or a json string) |
skip |
|
0 |
The number of documents to skip |
limit |
|
0 |
The max number of documents to show |
collection |
|
empty |
The collection name (takes precedence over the collection passed with |
Examples
Given the following collections:
// Product
...
{"_id": ObjectId("product1"), "name": "Product 1", "price": 100}
{"_id": ObjectId("product3"), "name": "Product 2", "price": 200}
{"_id": ObjectId("product3"), "name": "Product 3", "price": 300}
...
// Person
...
{"_id": ObjectId("personAl"), "name": "Al", expr: BsonRegularExpression("foo*"), "bought": [ObjectId("product1"), ObjectId("product3")]}
{"_id": ObjectId("personJohn"), "name": "John", "age": 40, "foo", "bar"}
{"_id": ObjectId("personJack"), "name": "Jack", "age": 50, "foo", "bar", expr: BsonRegularExpression("bar*"), "bought": [ObjectId("product1"), ObjectId("product2")]}
...
we can run the following procedures.
apoc.mongo.aggregate
CALL apoc.mongo.aggregate('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{`$match`: {foo: 'bar'}}, {`$set`: {aggrField: 'Y'} }])
value |
---|
|
|
apoc.mongo.count
CALL apoc.mongo.count('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin')
value |
---|
3 |
We can also pass the collection name through the config parameter:
CALL apoc.mongo.count('mongodb://user:pass@localhost:27017/myDb?authSource=admin', {collection: 'Person'})
value |
---|
3 |
apoc.mongo.find
If we want to extract the all `Person`s with default parameter:
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin')
value |
---|
|
|
|
In addition, we can pass the query param like:
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'bar*', `$options`: ''}})
value |
---|
|
If we want to extract bought
references, through config parameter:
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {extractReferences: true})
value |
---|
|
Moreover, we can retrieve the ObjectId
s with theirs HexString
representation through objectIdAsMap
config:
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {objectIdAsMap: false, extractReferences: true})
value |
---|
|
Furthermore, we can skip n
values and pass a project parameter:
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 2, project: {age: 1}})
value |
---|
|
We can pass query
, skip
and sort
parameter as stringified values, for example:
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', '{foo: "bar"}', {sort: '{name: -1}', project: '{age: 1}'})
value |
---|
|
|
Furthermore, we can use the limit
parameter, for example:
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 1, limit: 1, project: {age: 1}})
value |
---|
|
Furthermore, we can pass a sort
parameter, for example:
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {sort: {name: -1}, objectIdAsMap: false, project: {name: 1}})
value |
---|
`` { "_id": "personJohn", "name": "John", } |
`` { "_id": "personJack", "name": "Jack", } |
|
apoc.mongo.update
To update the age
property of the John
document:
CALL apoc.mongo.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"}, {`$set`: {age:99}})
with the number of row affected as result:
value |
---|
1 |
apoc.mongo.delete
To delete the John
document:
CALL apoc.mongo.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"})
with the number of row affected as result:
value |
---|
1 |
apoc.mongo.insert
To insert 2 document {"secondId": ObjectId("507f191e811c19729de860ea"), "baz": 1}
and {"secondId": ObjectId("507f191e821c19729de860ef"), "baz": 1}
in a Person
collection (in this case the procedure return void
):
CALL apoc.mongo.insert('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{secondId: {`$oid`: '507f191e811c19729de860ea'}, baz: 1}, {secondId: {`$oid`: '507f191e821c19729de860ef'}, baz: 1}])