为什么这个 pymongo 子文档找不到工作?
Why doesn't this pymongo subdocument find work?
我正在考虑使用 mongodb,到目前为止,我尝试过的大多数方法都有效。但是我不知道为什么这个发现不起作用。
col = db.create_collection("test")
x = col.insert_many([
{"item": "journal", "qty": 25, "size": {"h": 14, "w": 21, "uom": "cm"}, "status": "A"},
{"item": "notebook", "qty": 50, "size": {"h": 8.5, "w": 11, "uom": "in"}, "status": "A"},
{"item": "paper", "qty": 100, "size": {"h": 8.5, "w": 11, "uom": "in"}, "status": "D"},
{"item": "planner", "qty": 75, "size": {"h": 22.85, "w": 30, "uom": "cm"}, "status": "D"},
{"item": "postcard", "qty": 45, "size": {"h": 10, "w": 15.25, "uom": "cm"}, "status": "A"}
])
cursor = col.find({"size": {"h": 14, "w": 21, "uom": "cm"}})
if cursor.retrieved == 0:
print("found nothing") # <<<<<<<<< prints this
如在 docs 中解释到 部分匹配 Embedded/Nested 文档:
Equality matches on the whole embedded document require an exact match of the specified document, including the field order.
因此,您必须按照数据库中存在的相同顺序将对象设置到 find
阶段。
我真的不知道对象中的键是否遵循严格的顺序(按字母顺序或其他顺序),但使用 this 查询几乎所有内容都会输出结果。并非总是如此,我认为有一个“随机”(或不可能处理)的概念来存储数据——至少到 mongo 游乐场——。
顺便说一句,确保结果的正确方法是使用 dot notation so this 查询将始终有效。
coll.find({
"size.h": 14,
"size.w": 21,
"size.uom": "cm"
})
我在想,如果 cursor.retrieved 找到了一些东西,它就不是零。我猜不会。我发现这行得通:
lst = list(cursor)
print(lst)
cursor.rewind()
print(list(cursor))
if len(lst) != 0:
for d in lst:
print(d)
我正在考虑使用 mongodb,到目前为止,我尝试过的大多数方法都有效。但是我不知道为什么这个发现不起作用。
col = db.create_collection("test")
x = col.insert_many([
{"item": "journal", "qty": 25, "size": {"h": 14, "w": 21, "uom": "cm"}, "status": "A"},
{"item": "notebook", "qty": 50, "size": {"h": 8.5, "w": 11, "uom": "in"}, "status": "A"},
{"item": "paper", "qty": 100, "size": {"h": 8.5, "w": 11, "uom": "in"}, "status": "D"},
{"item": "planner", "qty": 75, "size": {"h": 22.85, "w": 30, "uom": "cm"}, "status": "D"},
{"item": "postcard", "qty": 45, "size": {"h": 10, "w": 15.25, "uom": "cm"}, "status": "A"}
])
cursor = col.find({"size": {"h": 14, "w": 21, "uom": "cm"}})
if cursor.retrieved == 0:
print("found nothing") # <<<<<<<<< prints this
如在 docs 中解释到 部分匹配 Embedded/Nested 文档:
Equality matches on the whole embedded document require an exact match of the specified document, including the field order.
因此,您必须按照数据库中存在的相同顺序将对象设置到 find
阶段。
我真的不知道对象中的键是否遵循严格的顺序(按字母顺序或其他顺序),但使用 this 查询几乎所有内容都会输出结果。并非总是如此,我认为有一个“随机”(或不可能处理)的概念来存储数据——至少到 mongo 游乐场——。
顺便说一句,确保结果的正确方法是使用 dot notation so this 查询将始终有效。
coll.find({
"size.h": 14,
"size.w": 21,
"size.uom": "cm"
})
我在想,如果 cursor.retrieved 找到了一些东西,它就不是零。我猜不会。我发现这行得通:
lst = list(cursor)
print(lst)
cursor.rewind()
print(list(cursor))
if len(lst) != 0:
for d in lst:
print(d)