Javascript 在单个内部属性上查找匹配的数组内容和长度

Javascript 在单个内部属性上查找匹配的数组内容和长度,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我试图让一个查询正常工作,但就我的一生而言,我陷入了困境 'chat.newDirect': function(otherUser) { CEChats.collection.find({ $and: [ { members:{ $elemMatch: {memberId: this.userId} }

我试图让一个查询正常工作,但就我的一生而言,我陷入了困境

  'chat.newDirect': function(otherUser) {
      CEChats.collection.find({
            $and: [
                { 
                    members:{
                    $elemMatch: {memberId: this.userId}
                }
            },
                { 
                    members:{
                    // $elemMatch: {memberId: otherUser._id}
                        $all: {
                            $elemMatch: {
                                memberId: otherUser.$._id
                            }
                        }
                    }
                }
            ]
        }).fetch();
最初otherUser是单个对象,但现在它已更改为对象数组

我要做的是在
otherUser
数组中查找具有所有ID的文档

otherUser.\u id
需要匹配
members.memberId
数组中的一个元素

我还希望它只返回具有确切成员列表的文档,因此不在这些文档的顶部添加额外的,因此我还打算添加一个长度检查来执行此操作

~编辑以进行澄清
otherUser
是传递到函数中的对象数组

[
    {_id: 1, fu:'fuu', bar:'baar'},
    {_id: 2, fu:'fuu', bar:'baar'},
    {_id: 3, fu:'fuu', bar:'baar'}
]
members
是我要比较的文档中的对象数组

[
{members: [
    {_id: 1, baz:'fuu'},
    {_id: 2, baz:'fuu'},
    {_id: 3, baz:'fuu'},
    {_id: 4, baz:'fuu'},
    {_id: 5, baz:'fuu'}
]},
{members: [
    {_id: 1, baz:'fuu'},
    {_id: 2, baz:'fuu'},
    {_id: 3, baz:'fuu'}
]},
{members: [
    {_id: 1, baz:'fuu'}
]}
]

运行查询后,只应返回第二个对象,因为它是唯一一个包含成员数组中对象中所有成员ID的对象

您需要转换源,然后使用和传递查询:

返回第二个结果:

    "members" : [
            {
                    "_id" : 1,
                    "baz" : "fuu"
            },
            {
                    "_id" : 2,
                    "baz" : "fuu"
            },
            {
                    "_id" : 3,
                    "baz" : "fuu"
            }
    ]

因此,首先使用只提取
\u id
值。然后您可以通过
“members.\u id”
传入,只需比较该数组内容的
\u id
值即可。另一个约束是可以从比较数组
.length
属性中获得的精确值。

您是说文档中有两个数组,您想知道它们是否有重叠的元素?不是很清楚你在说什么。你能展示一个数据示例以及你想要实现什么吗?@NeilLunn我添加了一个示例,我希望它能澄清问题。在我输入澄清部分后,我刚刚开始进行转换。谢谢你的帮助:D
    "members" : [
            {
                    "_id" : 1,
                    "baz" : "fuu"
            },
            {
                    "_id" : 2,
                    "baz" : "fuu"
            },
            {
                    "_id" : 3,
                    "baz" : "fuu"
            }
    ]