MongoDB
可用过程
签名 |
---|
apoc.mongo.aggregate(uri, pipeline, $config) yield value - 在 mongodb 集合上执行聚合操作 |
apoc.mongo.count(uri, query, $config) yield value - 在 mongodb 集合上执行计数操作 |
apoc.mongo.find(uri, query, $config) yield value - 在 mongodb 集合上执行查找操作 |
apoc.mongo.delete(uri, query, $config) - 从 mongodb 集合中删除给定文档并返回受影响的文档数量 |
apoc.mongo.insert(uri, documents, $config) yield value - 将给定文档插入 mongodb 集合 |
apoc.mongo.update(uri, query, update, $config) - 更新 mongodb 集合中的给定文档并返回受影响的文档数量 |
安装依赖项
Mongo 过程依赖于一个客户端库,该库不包含在 APOC Extended 库中。
此依赖项包含在 apoc-mongodb-dependencies-5.26.1-all.jar 中,可以从发布页面下载。下载该文件后,应将其放置在 plugins
目录中,然后重新启动 Neo4j Server。
字段描述
-
uri
:连接字符串 URI,格式为mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]]/databaseName.collectionName[?options]
。请注意,此 uri 必须包含数据库名称和(如果未明确指定collection
配置参数)集合名称(例如mongodb://user:pass@localhost:27017/myDb.myCollection?authSource=admin
) -
query
:查询参数映射(可以是 map 或 json 字符串) -
update
:更新参数映射(仅用于apoc.mongo.update
) -
documents
:要插入的文档(仅用于apoc.mongo.insert
) -
config
:见下文
配置参数
这些过程支持以下配置参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
extractReferences |
|
false |
如果为 true 且字段包含 ObjectId,则将包含相关文档而不是 ObjectId |
objectIdAsMap |
|
true |
如果为 true,则将 ObjectId 提取为 map |
project |
|
空 |
投影参数(可以是 map 或 json 字符串) |
sort |
|
空 |
排序参数(可以是 map 或 json 字符串) |
skip |
|
0 |
要跳过的文档数量 |
limit |
|
0 |
要显示的最大文档数量 |
collection |
|
空 |
集合名称(优先于通过 |
示例
给定以下集合
// 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")]}
...
我们可以运行以下过程。
apoc.mongo.aggregate
CALL apoc.mongo.aggregate('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{`$match`: {foo: 'bar'}}, {`$set`: {aggrField: 'Y'} }])
值 |
---|
|
|
apoc.mongo.count
CALL apoc.mongo.count('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin')
值 |
---|
3 |
我们还可以通过 config 参数传递集合名称
CALL apoc.mongo.count('mongodb://user:pass@localhost:27017/myDb?authSource=admin', {collection: 'Person'})
值 |
---|
3 |
apoc.mongo.find
如果我们想使用默认参数提取所有 `Person`
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin')
值 |
---|
|
|
|
此外,我们可以传递查询参数,例如
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'bar*', `$options`: ''}})
值 |
---|
|
如果我们想通过 config 参数提取 bought
引用
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {extractReferences: true})
值 |
---|
|
此外,我们可以通过 objectIdAsMap
配置检索具有 HexString
表示的 ObjectId
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {objectIdAsMap: false, extractReferences: true})
值 |
---|
|
此外,我们可以跳过 n
个值并传递一个 project 参数
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 2, project: {age: 1}})
值 |
---|
|
我们可以将 query
、skip
和 sort
参数作为字符串化值传递,例如
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', '{foo: "bar"}', {sort: '{name: -1}', project: '{age: 1}'})
值 |
---|
|
|
此外,我们可以使用 limit
参数,例如
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 1, limit: 1, project: {age: 1}})
值 |
---|
|
此外,我们可以传递一个 sort
参数,例如
CALL apoc.mongo.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {sort: {name: -1}, objectIdAsMap: false, project: {name: 1}})
值 |
---|
`` { "_id": "personJohn", "name": "John", } |
`` { "_id": "personJack", "name": "Jack", } |
|
apoc.mongo.update
更新 John
文档的 age
属性
CALL apoc.mongo.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"}, {`$set`: {age:99}})
结果是受影响的行数
值 |
---|
1 |
`` { "_id": { "timestamp": <…>, "machineIdentifier": <…>, "processIdentifier": <…>, "counter": <…>, }, "ok": 1, "n": 1, "updatedExisting": true }
CALL apoc.mongo.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"})
结果是受影响的行数
值 |
---|
1 |
`` { "_id": { "timestamp": <…>, "machineIdentifier": <…>, "processIdentifier": <…>, "counter": <…>, }, "ok": 1, "n": 1 }
在 Person 集合中插入 2 个文档 {"secondId": ObjectId("507f191e811c19729de860ea"), "baz": 1} 和 {"secondId": ObjectId("507f191e821c19729de860ef"), "baz": 1}(在这种情况下,该过程返回 void)
CALL apoc.mongo.insert('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{secondId: {`$oid`: '507f191e811c19729de860ea'}, baz: 1}, {secondId: {`$oid`: '507f191e821c19729de860ef'}, baz: 1}])