我正在使用Python-3.7.2
,Pymongo-3.7.2
和Mongo-4.0.3
。
我是使用MongoDB的新手。我有以下MongoDB数据,其中s.head()
是我自己的预定义class method
,用于打印在条件()
下找到的前5个文档,这实际上意味着找到的每个文档的前5个。>
In [115]: s.head()
{'_id': 2,
'message': [{'content': 'aaaaaaaaaaaaaaaa',
'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 37, 25, 304000)},
{'content': 'bbbbbbbbbbbbbbbbbbbbbbb',
'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 41, 23, 745000)},
{'content': 'bbbbbbbbbbbbbbbbbbbbbbb',
'sender': 'x333',
'time': datetime.datetime(2019, 3, 5, 7, 43, 55, 772000)},
{'content': 'bbbbbbbbbbbbbbbbbbbbbbb',
'sender': '333x',
'time': datetime.datetime(2019, 3, 5, 7, 44, 26, 628000)},
{'content': 'bbbbbbbbbbbbbbbbbbbbbbb',
'sender': 'y',
'time': datetime.datetime(2019, 3, 5, 7, 44, 33, 907000)}]}
我想查询sender == 'x'
处的所有消息,所以我想到了用以下代码查询它们的想法:
In [117]: list(s.collection.find({'message.sender': 'x'}))
Out[117]:
[{'_id': 2,
'message': [{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 37, 25, 304000),
'content': 'aaaaaaaaaaaaaaaa'},
{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 41, 23, 745000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': 'x333',
'time': datetime.datetime(2019, 3, 5, 7, 43, 55, 772000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': '333x',
'time': datetime.datetime(2019, 3, 5, 7, 44, 26, 628000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': 'y',
'time': datetime.datetime(2019, 3, 5, 7, 44, 33, 907000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'}]}]
In [118]: list(s.collection.find({'message.sender': 'y'}))
Out[118]:
[{'_id': 2,
'message': [{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 37, 25, 304000),
'content': 'aaaaaaaaaaaaaaaa'},
{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 41, 23, 745000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': 'x333',
'time': datetime.datetime(2019, 3, 5, 7, 43, 55, 772000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': '333x',
'time': datetime.datetime(2019, 3, 5, 7, 44, 26, 628000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
{'sender': 'y',
'time': datetime.datetime(2019, 3, 5, 7, 44, 33, 907000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'}]}]
但是,以上两个代码都无法准确查询我想要的结果。我想要的结果是这样的:
In [117]: list(s.collection.find({'message.sender': 'x'}))
Out[117]:
[{'_id': 2,
'message': [{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 37, 25, 304000),
'content': 'aaaaaaaaaaaaaaaa'},
{'sender': 'x',
'time': datetime.datetime(2019, 3, 5, 7, 41, 23, 745000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'},
In [118]: list(s.collection.find({'message.sender': 'y'}))
Out[118]:
[{'_id': 2,
'message': [{'sender': 'y',
'time': datetime.datetime(2019, 3, 5, 7, 44, 33, 907000),
'content': 'bbbbbbbbbbbbbbbbbbbbbbb'}]}]
我的问题如下:
array
来保存此类数据?我正在尝试跟踪有意义的数据(例如销售交易)并将数据绑定到用户的_id
。谢谢!