Mongodb在多个匹配中的特定文档上使用findAndModify
Posted
技术标签:
【中文标题】Mongodb在多个匹配中的特定文档上使用findAndModify【英文标题】:Mongodb use findAndModify on specific document among multiple match 【发布时间】:2018-08-01 22:12:13 【问题描述】:我的文件如下所示
let object = [
id: 4,
parents:
[
1, 2,
],
children: 2
,
id: 5,
parents:
[
1, 2,
],
children: 1
,
id: 8,
parents:
[
1, 2, 4
],
children: 0
,
id: 9,
parents:
[
1, 2, 4
],
children: 0
,
id: 10,
parents:
[
1,2,5
],
children:0
]
我想使用findAndModify
来更新孩子的价值。它必须是findAndModify
,因为我将在多线程环境中工作,因此选择和更新必须在单个事务中进行。
我正在寻找的条件是当“2”包含在parents
数组中并且children
值小于2 时,children
值最高,而父母数量在足够的文档中最低。然后我想增加第一个匹配文档的孩子的价值。
我现在想出的查询如下
let query =
parents:
$elemMatch:2
,
children:
$lt: 2
;
这足以满足前几个条件,但不幸的是我不知道如何选择出来
id: 5,
parents:
[
1, 2,
],
children: 1
,
出
id: 8,
parents:
[
1, 2, 4
],
children: 0
,
id: 9,
parents:
[
1, 2, 4
],
children: 0
,
id: 10,
parents:
[
1,2,5
],
children:0
这是我的查询当前选择的内容。同样,它必须是单个事务,因此不可能写出另一组查询。
至于为什么一定要单笔交易,可以参考这篇帖子How to limit maximum reference of the parental node in mongodb
【问题讨论】:
【参考方案1】:试试这个
query.findAndModify(
query: $and: [ children :$lt : 2 , parents: $size: 2 ] ,
update: according to you
);
【讨论】:
以上是关于Mongodb在多个匹配中的特定文档上使用findAndModify的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB find() 在匹配(字段,值)时返回子文档
Mongodb:在 find() 中使用 $or 时返回匹配的过滤器
Mongodb:在 find() 中使用 $or 时返回匹配的过滤器