我有一个mongodb数据库,我想知道如何对它的对象执行以下操作:
应该注意的是,上面的2个操作不会彼此接近(或实现),而是在相同的上下文中是2个不同的要求。
假设我有一个类似下面的对象:
{'_id': ObjectId('5c783fcbfb971900174a12c2'),
'actions': [{'_id': ObjectId('5c8027b2de30cc4c1e91934f'),
'questions': [{'_id': ObjectId('5c802cd9de30cc4c1e919350'),
'is_required': True,
'possible_answers': [{'choice': 1,
'text': 'lamborghini'},
{'choice': 2,
'text': 'black-lamborghini'},
{'choice': 3,
'text': 'white-lamborghini'}],
'question_title': 'what is your favorite car?',
'question_type': 'MULTIPLE_CHOICE',
'sequence': 1},
{'_id': ObjectId('5c802cd9de30cc4c1e919351'),
'is_required': False,
'possible_answers': [{'choice': 1, 'text': 'blue'},
{'choice': 2,
'text': 'light-blue'},
{'choice': 3,
'text': 'dark-blue'}],
'question_title': 'what is your favorite color?',
'question_type': 'MULTIPLE_CHOICE',
'sequence': 2},
{'_id': ObjectId('5c802cd9de30cc4c1e919352'),
'is_required': True,
'question_title': 'what is your name?',
'question_type': 'DESCRIPTIVE',
'sequence': 3}]}]}
现在,我希望能够从该对象的动作问题中得到一个问题。我尝试了以下方法:
db.getCollection('mycollection').find(
{'_id': ObjectId('5ccafe351dd5c3ac3c0df2b3'),
'actions': {'$elemMatch': {'_id': ObjectId('5ccafe351dd5c3ac3c0df2b3'),
'questions': {'$elemMatch': {'sequence': 'some-seq'}}}}},
{'_id': 0, 'actions.$.questions': 1}
)
这给了我action
的整个对象以及所有的问题;但这不是我想要的输出。
我想看到类似这样的内容(仅question
及其字段):
{'_id': ObjectId('5c802cd9de30cc4c1e919350'),
'is_required': True,
'possible_answers': [{'choice': 1, 'text': 'lamborghini'},
{'choice': 2, 'text': 'lamborghini-black'},
{'choice': 3, 'text': 'lamborghini-white'}],
'question_title': 'what is your favorite car?',
'question_type': 'MULTIPLE_CHOICE',
'sequence': 1}
我不必告诉你我已经尝试过{'_id': 0, 'actions.0.questions.$': 1}
,但到目前为止还没有运气。