gpt4 book ai didi

javascript - 如何查询某个用户的所有文章?

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

代码:

服务器端

     /**
* List of Articles
*/
exports.list = function (req, res) {
Article.find({ 'user.displayName': 'GIGANTOR !' }).sort('-created').populate('user', 'displayName').exec(function (err, articles) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
<小时/>

情况:

我上面的尝试不起作用。我检查了 Mongoose 文档:http://mongoosejs.com/docs/queries.html

但似乎无法让查询工作。目前,该查询仅返回任何内容。

<小时/>

问题:

如何查询具有特定displayName的用户的所有文章?

最佳答案

TL;DR 您无法通过属于填充对象的字段查询文档。

由于 article 只是有一个 refUser,因此您只需获取所有文章,然后在内存中过滤它们。或者,由于 article.user 字段是 _id,因此您可以通过用户 ID 查找文章(但您的问题是询问如何通过 user.displayName 查找它们) )。

Mongoose populate 不会在 MongoDB 服务器本身中进行填充;它填充在应用程序服务器上。这意味着正在发生与数据库的多次往返(请参阅文章 Understanding Mongoose Population。)因此,您无法通过作为填充对象的一部分存在的字段进行查询。

所以,这是您的 2 个解决方案:

  Article.find({}).sort('-created').populate('user', 'displayName').exec(function (err, articles) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
let filteredArticles = articles
.filter(article => article.user.displayName === 'GIGANTOR !');

res.json(filteredArticles);
}
});

或者,如果您可以通过_id查询,您可以这样做:

  Article.find({ user: 'somemongoobjectidofuser' }).sort('-created').populate('user', 'displayName').exec(function (err, articles) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});

这有点毛茸茸的,超出了问题的范围,但另一个解决方案是 aggregation pipeline ,通常仅建议用于后端分析。但是,它将为您的查询提供更大的灵 active (特别是如果您使用 MongoDB 的新 $graphLookup )。

或者,您始终可以将用户的副本作为非规范化对象存储在文章文档本身中,但随后您会遇到经常讨论的保持非规范化文档同步的问题。

关于javascript - 如何查询某个用户的所有文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034890/

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