Mongodb 嵌套数组的所有元素都不是相同值的查询集合
我的注册数据结构如下:Mongodb 嵌套数组的所有元素都不是相同值的查询集合,mongodb,multidimensional-array,aggregation-framework,Mongodb,Multidimensional Array,Aggregation Framework,我的注册数据结构如下: event: "Event A", level: "A", field: "Main", buyer: ["thisuser@gmail.com"], players: [ { first: "Bob", last: "Baker", email: "bobbaker@gmail.com", myid: 1234567, signed: false }, { first: "John", last: "Doe", email:
event: "Event A",
level: "A",
field: "Main",
buyer: ["thisuser@gmail.com"],
players: [
{
first: "Bob",
last: "Baker",
email: "bobbaker@gmail.com",
myid: 1234567,
signed: false
},
{
first: "John",
last: "Doe",
email: "johndoe@who.com",
myid: 4325678,
signed: true
}
]
我正在尝试对注册参加不同级别活动的玩家进行查询。到目前为止,我已经:
db.registrations.aggregate(
[
{ $unwind: '$players' },
{
$group: {
_id: { myid: '$players.myid' },
events: {
$push: {
event: '$event',
level: '$level',
field: '$field',
buyer: ['$buyer']
}
}
}
},
{ $match: { events: { $size: 2 }, 'events.level': 'A' } }
])
我在想,如果我能够将所有events.level与events数组中的第一条记录进行比较,那么聚合的最后一行就可以工作了。我只是不知道怎么做。我希望数据输出如下:
{
"_id" : { "myid" : 1081245 },
"events" : [
{ "event" : "Women's AA", "level" : "AA", "field" : "PAL", "buyer" : [ "email@osu.edu" ] },
{ "event" : "COED A", "level" : "A", "field" : "Main", "buyer" : [ "ngruber@cdeducation.org" ] } ] }
{ "_id" : { "myid" : 1081202 },
"events" : [
{ "event" : "Women's BB", "level" : "BB", "field" : "PAL", "buyer" : [ "amothermail@gmail.com" ] },
{ "event" : "COED A", "level" : "A", "field" : "Main", "buyer" : [ "emailing@gmail.com" ] } ] }
{ "_id" : { "myid" : 1081196 },
"events" : [
{ "event" : "Men's A", "level" : "A", "field" : "PAL", "buyer" : [ "myemail@outlook.com" ] },
{ "event" : "COED BB", "level" : "BB", "field" : "Main", "buyer" : [ "hisemail@gmail.com" ] } ] }
{ "_id" : { "myid" : 1080246 },
"events" : [
{ "event" : "Men's A", "level" : "A", "field" : "PAL", "buyer" : [ "dude@outlook.com" ] },
{ "event" : "COED BB", "level" : "BB", "field" : "Main", "buyer" : [ "fella@gmail.com" ] } ] }
我尝试将聚合的最后一行更改为:
{ $match: { events: { $size: 2 }, {$not: {'events.level': '$first'} }} }
如何执行此操作?在上面的示例数据中,前两个文档不包含
事件。级别在事件数组的第一个位置等于A
,那么返回的原因是什么?在上面的示例数据中,前两个文档不包含事件。级别在事件数组的第一个位置等于A
,那么返回的原因是什么返回?