Apostrophe CMS:嵌入式文档的ID值

时间:2019-01-16 10:07:32

标签: apostrophe-cms

我已经编写了一个迁移脚本,并使用apostrophe-migrations模块运行它。我正在尝试更新一些现有文档,并且需要添加新的嵌入式文档。我可以看到由撇号生成的嵌入式文档具有如下所示的ID。

<?xml version="1.0" encoding="UTF-8"?><sld:UserStyle xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc">
  <sld:Name>Default Styler</sld:Name>
  <sld:FeatureTypeStyle>
    <sld:Name>name</sld:Name>
    <sld:Rule>
      <sld:PointSymbolizer>
        <sld:Graphic>
          <sld:Mark>
            <sld:Fill>
              <sld:CssParameter name="fill">#FF0000</sld:CssParameter>
            </sld:Fill>
            <sld:Stroke>
              <sld:CssParameter name="stroke">#FF0000</sld:CssParameter>
            </sld:Stroke>
          </sld:Mark>
          <sld:Size>8.0</sld:Size>
        </sld:Graphic>
      </sld:PointSymbolizer>
    </sld:Rule>
    <sld:Rule>
      <sld:TextSymbolizer>
        <sld:Label>
          <ogc:PropertyName>name</ogc:PropertyName>
        </sld:Label>
        <sld:Font>
          <sld:CssParameter name="font-family">Times New Roman</sld:CssParameter>
          <sld:CssParameter name="font-size">10.0</sld:CssParameter>
          <sld:CssParameter name="font-style">normal</sld:CssParameter>
          <sld:CssParameter name="font-weight">normal</sld:CssParameter>
        </sld:Font>
        <sld:LabelPlacement>
          <sld:PointPlacement>
            <sld:AnchorPoint>
              <sld:AnchorPointX>0.0</sld:AnchorPointX>
              <sld:AnchorPointY>0.5</sld:AnchorPointY>
            </sld:AnchorPoint>
          </sld:PointPlacement>
        </sld:LabelPlacement>
        <sld:Fill>
          <sld:CssParameter name="fill">#000000</sld:CssParameter>
        </sld:Fill>
      </sld:TextSymbolizer>
    </sld:Rule>
  </sld:FeatureTypeStyle>
</sld:UserStyle>

这些ID由什么组成?现在我正在使用

"_id" : "w958610296299634883"

为嵌入式文档提供ID,该ID生成MongoDB ObjectID。如何生成上面的ID,这样以后就不会再遇到任何问题了? 或者我可以继续使用MongoDB ObjectID?

1 个答案:

答案 0 :(得分:1)

首先,在服务器端,self.apos.utils.generateId()不会生成MongoDB ObjectID。您永远都不会在撇号文档中看到这些内容。它使用Eric Elliot出色的cuid模块生成ID。

第二,您所指的那些“嵌入式文档”是Apostrophe小部件。而且,由于它们是在浏览器端“出生”的,因此它们的ID通常是在浏览器端生成的。那里的算法根本不复杂,因为它没有用于数据库中的独立文档。足以防止小部件ID在单个文档中冲突:

'w' + Math.floor(Math.random() * 1000000000) + Math.floor(Math.random() * 1000000000);

但是,您不必以这种方式生成它们,我也不会真的在服务器上推荐它,因为您可以使用一些更好的东西,而不必重新发明轮子。我会用:

'w' + self.apos.utils.generateId();

这提供了与浏览器端操作一致的功能,因为我们有时会使用此字母来区分真实的文档ID和窗口小部件ID。 (一个cuid以c开头。)

希望这对您有所帮助!