这意味着如果我运行两个类似于以下方式的findAndModify:
{a:1},{set:{status:"processing", engine:1}}
{a:1},{set:{status:"processing", engine:2}}
如果这个查询可能会影响到2,000个文档,因为有两个查询(2个引擎),那么可能会有一些文档将有"engine:1"和其他一些文档将有"engine:2"。
我不认为findAndModify会隔离“第一个查询”。 为了隔离第一个查询,我需要使用$isolated。
我写的一切都对吗?
更新-场景
想要编写一个邻近引擎。 集合User有1000-2000-3000个用户,或者有数百万个。
1-按最接近点“lng,lat”排序 2-在NodeJS中进行一些计算,这是在MongoDB中无法完成的 3-现在我将把用户分组为“UserGroup”,并编写批量更新
当我有2000-3000个用户时,这个过程(从1到3)需要时间。 所以我想要有多个线程并行处理。
并行线程意味着并行查询。这可能是一个问题,因为查询3可能会占用查询1的一些用户。如果发生这种情况,在点(2)我就不会得到最近的用户,而是得到了最近的“针对此查询”的用户,因为另一个查询可能已经占用了其余的用户。这可能导致纽约的一些用户与洛杉矶的用户分组。
更新2-场景
我有一个像这样的集合:
{location:[lng,lat], name:"1",gender:"m", status:'undone'}
{location:[lng,lat], name:"2",gender:"m", status:'undone'}
{location:[lng,lat], name:"3",gender:"f", status:'undone'}
{location:[lng,lat], name:"4",gender:"f", status:'done'}
我应该能够做的是,通过最接近的用户分组来创建用户“组”。每个组都有1男性+1女性。在上面的例子中,我期望只有一个组(user1+user3),因为它们是男女搭配且非常接近(user-2也是男性,但离User-3很远,而user-4也是女性,但已经处理完毕)。
现在组已经创建(仅有1个组),因此这两个用户被标记为“完成”,另一个用户-2被标记为“未完成”以供将来操作。
我希望能够快速管理1000-2000-3000个用户。
更新3:社区反馈 好的,现在让我来总结一下您的情况。根据您的数据,您想要将男性和女性条目配对,基于它们彼此之间的接近程度。假设您不想进行每个可能的匹配,而只是设置一份普通的“推荐”列表,每个用户最多10个,按照最近的位置排序。现在我必须很傻才看不出这个问题的全面方向,但这是否概括了基本的初始问题陈述。处理每个用户,找到他们的“配对”,一旦配对标记为“完成”,则通过组合将它们从其他配对中排除?
@
了吗?这在这里被称为标记。如果你想和某人交谈,就像我所做的那样。你能否编辑你的问题,因为它没有任何意义。你需要在你的问题中清楚地陈述你的情况,而不是在你的评论中。停止考虑$isolated
,开始说出你真正需要做的事情。在这里不能更清楚,$isolated
不是 你想要的。 - Blakes Seven