小编Voi*_*oyd的帖子

MongoDB查询检查数组属性中是否有值

我无法找到如何检查,如果某些值在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中查询呢?有任何想法吗?

querying mongodb

2
推荐指数
1
解决办法
1万
查看次数

为什么我的脚本会在删除数百万个文件时定期冻结?

我的目标是从中删除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)

python linux filesystems performance delete-file

1
推荐指数
1
解决办法
233
查看次数