gpt4 book ai didi

node.js - nodejs app mongoose数据库where子句与join

转载 作者:可可西里 更新时间:2023-11-01 10:43:01 31 4
gpt4 key购买 nike

我有一个架构文章定义为:

var ArticleSchema = new Schema({
title: String,
content: String,
creator: {
type: Schema.ObjectId,
ref: 'User'
}
})

和用户架构:

var UserSchema = new Schema({
type: String, //editor, admin, normal

username: String,
password: String,

})

我需要查询编辑器创建的所有文章,即用sql语言

select Article.title as title, Article.content as content
from Article inner join User
on Article.creator = User._id
where User.type = 'editor'

这是我试过的

exports.listArticle = function(req, res, next) {
var creatorType = req.query.creatorType
var criteria = {}
if (creatorType)
criteria = {'creator.type': creatorType}
Article.find(criteria).populate('creator').exec(function(err, articles) {
if (err)
return next(err)
//ok to send the array of mongoose model, will be stringified, each toJSON is called
return res.json(articles)
})
}

返回的articles是一个空数组[]

我还尝试了 Article.populate('creator').find(criteria),但也没有出现错误:

utils.populate: invalid path. Expected string. Got typeof `undefined`

最佳答案

MongoDB 中没有连接的概念,因为它不是关系数据库。

populate 方法实际上是 Mongoose 的一个特性,内部使用多个查询来替换引用的字段。

这必须使用多部分查询来完成,首先在用户集合上,然后在文章集合上。

exports.listArticle = function(req, res, next) {

var creatorType = req.query.creatorType
var criteria = {}
if (creatorType)
criteria = {'type': creatorType}

User.distinct('_id', criteria, function (err, userIds) {

if (err) return next(err);

Article.find({creator: {$in: userIds}}).populate('creator').exec(function(err, articles) {
if (err)
return next(err)
//ok to send the array of mongoose model, will be stringified, each toJSON is called
return res.json(articles)
})
})

}

关于node.js - nodejs app mongoose数据库where子句与join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228674/

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