对于第一个问题,使用
https://docs.mongodb.com/manual/reference/operator/aggregation/objectToArray/
.
r = db.foo.aggregate([
{$project: {foo: {$objectToArray: '$foo'}}},
{$project: {foo: '$foo.v'}},
])
# =>
{"_id":1,"foo":[{"bar":["cat","dog","cow"]},{"bar":["cat","cat","dog"]}]}
{"_id":2,"foo":[{"bar":["cow"]},{"bar":["dog"]},{"bar":["cow"]},{"bar":["cat","dog","cat"]}]}
{"_id":3,"foo":[{"bar":["cat","cow"]},{"bar":["cow"]},{"bar":["cat"]}]}
关于你的第二个问题:
r = db.foo.aggregate([
{$project: {foo: {$objectToArray: '$foo'}}},
{$project: {foo: '$foo.v'}},
{$project: {foo: {$cond: {
if: {eq: ['cat', '$foo.bar']},
then: '$foo.bar',
else: '$$REMOVE',
}}}},
{$project: {foo: {$filter: {
input: '$foo',
as: 'x',
cond: {$in: ['cat', '$$x']},
}}}},
{$match: {foo: {$size: 1}}},
])
{"_id":2,"foo":[["cat","dog","cat"]]}