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"
}
]