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 扩展库中未包含的客户端库。
此依赖项包含在 apoc-mongodb-dependencies-5.21.0-all.jar 中,可以从 发行页面 下载。下载该文件后,应将其放置在 plugins
目录中,并重新启动 Neo4j 服务器。
字段描述
-
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
: 查询参数映射(可以是映射或 json 字符串) -
update
: 更新参数映射(仅适用于apoc.mongo.update
) -
documents
: 要插入的文档(仅适用于apoc.mongo.insert
) -
config
: 请参见下文
配置参数
这些过程支持以下配置参数
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
extractReferences |
|
false |
如果为 true 且字段包含 |
objectIdAsMap |
|
true |
如果为 true,则将 |
project |
|
空 |
投影参数(可以是 map 或 json 字符串) |
排序 |
|
空 |
排序参数(可以是 map 或 json 字符串) |
跳过 |
|
0 |
要跳过的文档数量 |
限制 |
|
0 |
要显示的文档最大数量 |
集合 |
|
空 |
集合名称(优先于使用 |
示例
给定以下集合
// 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
config 获取带有 HexString
表示形式的 ObjectId
CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {objectIdAsMap: false, extractReferences: true})
值 |
---|
|
此外,我们可以跳过 n
个值并传递投影参数
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 |
apoc.mongo.delete
要删除 John
文档
CALL apoc.mongo.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"})
结果为受影响的行数
值 |
---|
1 |
apoc.mongo.insert
要在 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}])