我有一个类似于以下
的用户集合{
{
_id: ObjectId(...),
services: {facebook: {id: 1}}
},
{
_id: ObjectId(...),
services: {facebook: {id: 2}}
},
...
}
此外,我有以下JavaScript数组:
[
{name: "Alice", id: 1},
{name: "Bob", id: 3},
...
]
我想找到其数据存在于数组中的所有用户,但我找不到“进入”JavaScript数组的方法。
答案 0 :(得分:1)
您可以使用array.map
函数从源数组中提取id
值,然后在find
中使用var arr = [
{name: "Alice", id: 1},
{name: "Bob", id: 3},
...
];
db.users.find({'services.facebook.id': {$in: arr.map(function(e) {return e.id;})}});
运算符,如下所示:< / p>
{{1}}
答案 1 :(得分:0)
首先将javascript数组转换为仅包含原始ID的数组:
var yourArray = [ 1, 3 ];
然后尝试此查询
db.yourCollection.find({ services.facebook.id : { $in : yourArray } });
不幸的是,没有什么好方法让数据库从本地数组(名称字段)加入数据库返回的数据。所以你必须自己做。对返回的文档进行for循环,并通过查找数组中的services.facebook.id字段找到真实姓名。
顺便说一下:与在SQL数据库中执行的操作相反,MongoDB中通常应避免使用人工外键(或一般的外键),因为MongoDB不是为了处理而构建的引用和关系数据库一样好。将数据嵌入文档而不是将其作为不同的文档引用通常是一个不错的选择。 “所有数据必须规范化”的教条不适用于像MongoDB这样的文档数据库,因为它适用于关系数据库。