gpt4 book ai didi

javascript - 将对象数组过滤为 mongodb/meteor 中的单个匹配对象

转载 作者:行者123 更新时间:2023-12-02 16:13:37 25 4
gpt4 key购买 nike

我有一个查询,如下所示:

var writer = Writers.findOne({
_id: writerId,
books: {
$elemMatch: {
id: Books.findOne({ slug: bookSlug })._id
}
}
});

但是,这将返回查询中类的完整列表。

{
name: "H.P. Lovecraft",
books: [{
id: "1234",
slug: "at-the-mountains-of-madness"
}, {
id: "5678",
slug: "herbert-west-reanimator"
}]
}

是否有一种方法可以消除除我想要的列表中的一项之外的所有信息并将其变成一个对象?也就是说,我希望我的最终结果是:

{
name: "H.P Lovecraft",
book: {
id: "1234",
slug: "herbert-west-reanimator"
}
}

如何使用 mongodb 在 Meteor 中完成此操作?

最佳答案

您可以采取的一种方法是使用 $elemMatch投影运算符与 findOne() 查询。对于 _id 等于 writerId 的文档,$elemMatch投影仅返回数组中的第一个匹配元素:

var bookId = Books.findOne({ slug: bookSlug })._id,
writer = Writers.findOne({ _id: writerId },
{ books: { $elemMatch: { id: bookId } },
_id: 0,
name: 1
}
);

另一种方法是使用 Underscore library's _.find()返回特定数组元素的方法:

var bookId = Books.findOne({ slug: bookSlug })._id,
writer = Writers.findOne({
_id: writerId,
books: {
$elemMatch: {
id: bookId
}
}
}),
book = _.find(writer.books, function(book) {return book.id === bookId});

关于javascript - 将对象数组过滤为 mongodb/meteor 中的单个匹配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29905317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com