插入子文档数组时为什么会出现“重复键错误”?

时间:2019-08-04 13:23:03

标签: javascript mongoose subdocument

我有一个Mongoose模式,在其中使用子文档。他们的定义是:

// VideoTexturedFace.shader //

#pragma arguments
float4x4 displayTransform //from ARFrame.displayTransform(for:viewportSize:)

#pragma body

// Transform the vertex to the camera coordinate system.
float4 vertexCamera = scn_node.modelViewTransform * _geometry.position;

// Camera projection and perspective divide to get normalized viewport coordinates (clip space).
float4 vertexClipSpace = scn_frame.projectionTransform * vertexCamera;
vertexClipSpace /= vertexClipSpace.w;

// XY in clip space is [-1,1]x[-1,1], so adjust to UV texture coordinates: [0,1]x[0,1].
// Image coordinates are Y-flipped (upper-left origin).
float4 vertexImageSpace = float4(vertexClipSpace.xy * 0.5 + 0.5, 0.0, 1.0);
vertexImageSpace.y = 1.0 - vertexImageSpace.y;

// Apply ARKit's display transform (device orientation * front-facing camera flip).
float4 transformedVertex = displayTransform * vertexImageSpace;

// Output as texture coordinates for use in later rendering stages.
_geometry.texcoords[0] = transformedVertex.xy;

现在,当我在“ vragen”字段中插入带有空数组的1个Check项目(“ vragen”是荷兰语的“ questions”)时,就没有问题了。 但是,当我尝试插入另一个Check项目时,该字段的字段值略有不同(因此它是唯一的),同时还使用一个空数组“ []”作为“ vragen”的值时,出现错误消息:“ MongoError:E11000重复键错误集合:demastermind_test.checks索引:vragen.vraagNummer_1 dup键:{:null}“。

为什么空数组导致重复的键错误?而我该如何预防呢?

然后,我检查了如果插入带有非空数组的Check项目会发生什么情况。因此,我插入了两个具有不同字段值的支票(因此它们是唯一的),其中1个项目的“ vraag”项目上有一个“ vragen”数组,而1个项目的中有两个“ vraag”项目上有一个“ vragen”数组他们(我确保两个项目有不同的“ vraagNummer”字样)。 这也会导致完全相同的重复键错误。

我想念什么?

1 个答案:

答案 0 :(得分:0)

我已解决此问题。显然,当我开始进行此操作时,我使用了不正确的架构定义(或其他内容),并且该错误在“收藏夹”中“卡住了”。

我通过删除整个Collection(目前是一个测试集合,所以这不是问题)解决了这个问题,现在它可以正常工作了。