我已经编写了一个迁移脚本,并使用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?
答案 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开头。)
希望这对您有所帮助!