2

我有一个如下所示的用户集合

{
    {
        _id: ObjectId(...),
        services: {facebook: {id: 1}}
    },
    {
        _id: ObjectId(...),
        services: {facebook: {id: 2}}
    },
    ...
}

此外,我有以下 JavaScript 数组:

[
    {name: "Alice", id: 1},
    {name: "Bob", id: 3},
    ...
]

我想查找其 id 存在于数组中的所有用户,但我找不到“进入”JavaScript 数组的方法。

4

2 回答 2

1

您可以使用该array.map函数id从源数组中提取值,然后将其与$in运算符一起使用,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;})}});
于 2013-01-25T13:58:51.367 回答
0

首先将 javascript 数组转换为仅包含原始 ID 的数组:

var yourArray = [ 1, 3 ];

然后试试这个查询

db.yourCollection.find({ services.facebook.id : { $in : yourArray } });

不幸的是,没有好的方法可以让数据库将本地数组(名称字段)中的信息与从数据库返回的数据连接起来。所以你必须自己做这件事。对返回的文档进行 for 循环,并通过查找数组中的 services.facebook.id 字段来查找真实姓名。

顺便说一句:与您在 SQL 数据库中所做的相反,在 MongoDB 中通常应避免使用人工外键(或一般的外键),因为 MongoDB 不是为像关系数据库那样处理引用而构建的。将数据嵌入文档而不是将其作为不同的文档引用通常是一个不错的选择。“所有数据必须规范化”的教条不适用于 MongoDB 之类的文档数据库,就像它适用于关系数据库一样。

于 2013-01-25T09:57:18.017 回答