大叫好,小弟我刚学习 mongodb ,过了一遍官方文档,我目前在做一个爬虫,爬取的信息存入文档,每个文档中有一个 field 是 from_url, 然后把这个文档信息的来源 url 存入。问题是,我以后爬取的时候,需要判断下是否已经存入过了,如果存入过这个 url 就放弃,没存入就爬取内容后进行存入。
刚学,不是很明白,请指教。谢谢
刚学,不是很明白,请指教。谢谢
推荐工具
› RoboMongo
推荐书目
› 50 Tips and Tricks for MongoDB Developers 1
kxxoling Jun 15, 2016 你要的是 `db.collections.yourCollection.find({from_url: {$eq: url}})`?
|
2
gzlock Jun 15, 2016 via Android
gg 搜 MongoDB exists 有很多结果
|
3
Neagle OP @gzlock 谢谢我使用 infos = db.test.find({"url":{"$exists":True}}) 只能找到存在 url 字段的文档,我想要的是 每个 url 字段里面 value 值是否已经存在了,谢谢。 难道要把 url 字段存在的文档全部返回 在到程序里面去判断?
|
5
doublleft Jun 15, 2016 其实仔细想一下,考虑这个问题有两个点:
1.原子性 2.单次查询次数 如果按照你说的方式:先查询这个是否存在,然后在写入。显然以上 2 个问题都是不满足的。 哦……我是这样实现的,表里加一个 hash 字段,存除了 id 之外所有的值的 crc32 值,做唯一索引。 这样每次新增的时候就直接写就好了:如果存在肯定会写失败,不存在一次写入,而且满足原子性。 |
6
Neagle OP @doublleft 感谢回复,的确是这两个问题, mongodb 没有更简单的办法? 或者说我就把 from_url 作唯一索引,用的时候直接写? 如果存在,就写失败,如果不存在则一次性写入?
|
9
onion83 Jun 20, 2016
可以研究下 findAndModify
|