node.js - 如何获取mongoose/mongodb中数组中除了我们传递的元素之外的元素?

标签 node.js mongodb mongoose

这是Conversations集合文档的结构。 它在消息数组内的对象中包含参与者数组。 Messages 数组包含多个消息对象,如下所示:

{
  "_id": "5540b34347fdd4e917b80aa4",
  "messages": [{
    "from": "5530af38576214dd3553331c",
    "_id": "5540d5dc22f922061f68a41d",
    "participants": ["5530af38576214dd3553331c", "553f280040d50ef20f8c9d66"]
  }]
}

这里我有 messages.from 数据,我想从 messages.participants 数组中获取除 messages.from 元素之外的元素。

在上面的示例中,from5530af38576214dd3553331c。因此我必须从 messages.participants 数组中获取元素 553f280040d50ef20f8c9d66

有几个类似上面的文档,对于每个文档我们都必须执行相同的操作。

我怎样才能在moongoose/mongodb中做到这一点?

最佳答案

您可以采取的一种方法是使用 lodash图书馆,特别是您想要 difference方法。这将使用 SameValueZero 进行相等比较,创建一个排除所提供数组的所有值的数组。注意:SameValueZero 比较类似于严格相等比较,例如===,但 NaNNaN 匹配。

所以你可以尝试以下方法:

Conservations.where("_id": "5540b34347fdd4e917b80aa4")
    .select({"messages": { "$elemMatch": {"from": "5530af38576214dd3553331c"}})
    .exec(function (err, docs){
        var set_difference = _.difference(["5530af38576214dd3553331c"], docs[0].messages.participants);
        console.log(set_difference); // => ["553f280040d50ef20f8c9d66"]
    });

关于node.js - 如何获取mongoose/mongodb中数组中除了我们传递的元素之外的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29961475/

相关文章:

mysql - 连接到mysql时mac上的nodejs错误

javascript - 如何使用tcp套接字将图像从[python客户端]发送到[node.js服务器]?

node.js - 如何授权访问 Google Cloud Function 中的 Directory API

node.js - MongoDB:手动锁定和解锁集合

python - 我可以轻松地将列表列表从 Node 传递到 python 吗?

javascript - 使用 Iron Router 发布帖子时出现问题

mongodb - Ionic 框架应用程序离线工作并与 mongoDB 同步数据

mongodb - 在 Mongoose 中验证其父级范围内的嵌入式文档的唯一性

node.js - Mongoose 自动重新连接选项

用于保留、嵌套或引用的 MongoDB 模式?