这是Conversations
集合文档的结构。
它在消息数组内的对象中包含参与者数组。 Messages 数组包含多个消息对象,如下所示:
{
"_id": "5540b34347fdd4e917b80aa4",
"messages": [{
"from": "5530af38576214dd3553331c",
"_id": "5540d5dc22f922061f68a41d",
"participants": ["5530af38576214dd3553331c", "553f280040d50ef20f8c9d66"]
}]
}
这里我有 messages.from
数据,我想从 messages.participants
数组中获取除 messages.from
元素之外的元素。
在上面的示例中,from
是 5530af38576214dd3553331c
。因此我必须从 messages.participants
数组中获取元素 553f280040d50ef20f8c9d66
。
有几个类似上面的文档,对于每个文档我们都必须执行相同的操作。
我怎样才能在moongoose/mongodb中做到这一点?
最佳答案
您可以采取的一种方法是使用 lodash图书馆,特别是您想要 difference方法。这将使用 SameValueZero
进行相等比较,创建一个排除所提供数组的所有值的数组。注意:SameValueZero
比较类似于严格相等比较,例如===
,但 NaN
与 NaN
匹配。
所以你可以尝试以下方法:
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/