问题描述
我试图在流星应用程序中的底层 mongodb 上创建一个两列唯一索引,但遇到了问题.我在流星文档中找不到任何内容.我已经从 chrome 控制台尝试过.我从 term 开始尝试,甚至尝试将 mongod 指向 .meteor 内的/db/目录.我试过了
I am trying to create a two column unique index on the underlying mongodb in a meteor app and having trouble. I can't find anything in the meteor docs. I have tried from the chrome console. I have tried from term and even tried to point mongod at the /db/ dir inside .meteor . I have tried
Collection.ensureIndex({first_id: 1, another_id: 1}, {unique: true});
变体.
我希望能够防止流星应用程序 mongo 集合中出现重复条目.
I want to be able to prevent duplicate entries on a meteor app mongo collection.
想知道是否有人发现了这一点?
Wondering if anyone has figured this out?
我回答了我自己的问题,真是个菜鸟.
I answered my own question, what a noob.
我想通了.
启动流星服务器
Start meteor server
打开第二个终端并输入meteor mongo
然后创建您的索引...例如,我为拇指向上和拇指向下类型系统的记录做了这些.
Then create your index...for example I did these for records of thumbsup and thumbsdown type system.
db.thumbsup.ensureIndex({item_id: 1, user_id: 1}, {unique: true})
db.thumbsdown.ensureIndex({item_id: 1, user_id: 1}, {unique: true})
现在,只需找出一个引导安装设置,在推送到 prod 时创建这些设置,而不是手动创建.
Now, just gotta figure out a bootstrap install setup that creates these when pushed to prod instead of manually.
推荐答案
根据 docs "Minimongo 目前没有索引.这个很快就会出现."看看 Collection 上可用的方法,没有 ensureIndex
.
According to the docs "Minimongo currently doesn't have indexes. This will come soon." And looking at the methods available on a Collection, there's no ensureIndex
.
您可以为 mongo shell 运行 meteor mongo
并启用服务器端索引,但 Collection 对象仍然不知道它们.因此,该应用程序将允许您将多个实例添加到集合缓存,而在服务器端,额外的插入将无声无息地失败(错误将写入输出).当您进行硬页面刷新时,应用程序将与服务器重新同步
You can run meteor mongo
for a mongo shell and enable the indexes server-side, but the Collection object still won't know about them. So the app will let you add multiple instances to the Collection cache, while on the server-side the additional inserts will fail silently (errors get written to the output). When you do a hard page refresh, the app will re-sync with server
所以你现在最好的选择可能是做这样的事情:
So your best bet for now is probably to do something like:
var count = MyCollection.find({first_id: 'foo', another_id: 'bar'}).count()
if (count === 0)
MyCollection.insert({first_id: 'foo', another_id: 'bar'});
这显然不理想,但工作正常.您还可以在服务器上的 mongodb 中启用索引,因此即使在出现竞争条件的情况下,您实际上也不会获得重复记录.
Which is obviously not ideal, but works ok. You could also enable indexing in mongodb on the server, so even in the case of a race condition you won't actually get duplicate records.
这篇关于如何在流星应用程序中向 mongodb 添加两列唯一 ID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!