Используйте этот код, чтобы найти запись между двумя датами, используя $gte
и $lt
:
db.CollectionName.find({"whenCreated": {
'$gte': ISODate("2018-03-06T13:10:40.294Z"),
'$lt': ISODate("2018-05-06T13:10:40.294Z")
}});
Я сравнил несколько методов с помощью perfplot (один из моих проектов). Вот результаты:
Для больших массивов, все методы об одинаково быстро. Размеры файла также равны, который должен ожидаться начиная с входного массива случайны, удваивается и следовательно едва сжимаемый.
Код для репродуцирования графика:
import perfplot
import pickle
import numpy
import h5py
import tables
import zarr
def npy_write(data):
numpy.save("npy.npy", data)
def hdf5_write(data):
f = h5py.File("hdf5.h5", "w")
f.create_dataset("data", data=data)
def pickle_write(data):
with open("test.pkl", "wb") as f:
pickle.dump(data, f)
def pytables_write(data):
f = tables.open_file("pytables.h5", mode="w")
gcolumns = f.create_group(f.root, "columns", "data")
f.create_array(gcolumns, "data", data, "data")
f.close()
def zarr_write(data):
zarr.save("out.zarr", data)
perfplot.save(
"write.png",
setup=numpy.random.rand,
kernels=[npy_write, hdf5_write, pickle_write, pytables_write, zarr_write],
n_range=[2 ** k for k in range(28)],
xlabel="len(data)",
logx=True,
logy=True,
equality_check=None,
)
соленые огурцы, pytables и hdf5 примерно одинаково быстры; соленые огурцы и zarr медленнее для больших массивов.
Код для репродуцирования графика:
import perfplot
import pickle
import numpy
import h5py
import tables
import zarr
def setup(n):
data = numpy.random.rand(n)
# write all files
#
numpy.save("out.npy", data)
#
f = h5py.File("out.h5", "w")
f.create_dataset("data", data=data)
f.close()
#
with open("test.pkl", "wb") as f:
pickle.dump(data, f)
#
f = tables.open_file("pytables.h5", mode="w")
gcolumns = f.create_group(f.root, "columns", "data")
f.create_array(gcolumns, "data", data, "data")
f.close()
#
zarr.save("out.zip", data)
def npy_read(data):
return numpy.load("out.npy")
def hdf5_read(data):
f = h5py.File("out.h5", "r")
out = f["data"][()]
f.close()
return out
def pickle_read(data):
with open("test.pkl", "rb") as f:
out = pickle.load(f)
return out
def pytables_read(data):
f = tables.open_file("pytables.h5", mode="r")
out = f.root.columns.data[()]
f.close()
return out
def zarr_read(data):
return zarr.load("out.zip")
perfplot.show(
setup=setup,
kernels=[
npy_read,
hdf5_read,
pickle_read,
pytables_read,
zarr_read,
],
n_range=[2 ** k for k in range(28)],
xlabel="len(data)",
logx=True,
logy=True,
)