我无法找到如何检查,如果某些值在mongo文档中的数组属性中.例如,我有一些集合用户,以及这样的文档:
{
'name':'Paul',
'age':43,
'friendsIDs': [ ObjectId('qqq...'), ObjectId('www...'), ObjectId('eee...') ],
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设我想检查一下,用户是ID对象ID('qqq ...')是Paul的朋友,还是没有.这在几乎所有的编程语言中都很容易做到,例如在php中它会是这样的:
$isFriendOfPaul = in_array( ObjectId('qqq...'), $friendsIds );
Run Code Online (Sandbox Code Playgroud)
但是如何在mongo中查询呢?有任何想法吗?
我的目标是从中删除1000万个临时文件dir.所以,我试着写一个Python脚本来做这件事.第一个场景看起来像这样:
#!/usr/bin/python
import os,sys
dirname = os.getcwd() if len(sys.argv) == 1 else sys.argv[1]
deleteConfirm = raw_input('Delete all files from dir ' + str(dirname) + ' (y/n)? ')
if(deleteConfirm not in ['y','Y']):
os._exit(0)
counter = 0
flist = os.listdir(dirname)
for file in flist:
os.remove(os.path.join(dirname, file))
counter+=1
if(0==counter%1000):
sys.stdout.write('\rDeleted %d files' % counter)
sys.stdout.flush()
print '\nDeleted %d files' % counter
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但我发现它每隔10-15秒就会停止一次,并且在大约一分钟左右不起作用.例如,前几秒场景快速输出已删除文件的数量 - 它只删除28 000个文件仅3-5秒,但随后它的输出在"已删除的28000个文件"上停止并等待很长时间 - 分钟左右.然后再次输出快速更新,并在几秒钟内再次删除数千个文件.但它又一次停下来等待着什么.我认为这是由于锁定文件,所以我尝试使用python3和多处理模块编写新方案,以删除几个进程中的文件.我认为它可能会有所帮助,因为即使一个进程等待某个文件要取消时钟,其他进程也会完成它们的工作.
这是新脚本:
#!/usr/bin/python3
import os, sys, time
from multiprocessing import Pool
dirname …Run Code Online (Sandbox Code Playgroud)