'use strict';
const db = uniCloud.database()

const $ = db.command.aggregate
const dbCmd = db.command

exports.main = async (event, context) => {

	const {
		user_id, // 用户id
		article_id, // 文章id
		content, // 评论内容
		comment_id = '', // 评论id
		reply_id = "", // 子回复ID
		is_reply = false // 是否子回复
	} = event

	let user = await db.collection('user').doc(user_id).get()
	// 获取用户对象
	user = user.data[0]
	// 获取当前的文章信息
	const article = await db.collection('article').doc(article_id).get()
	// 获取文章下的所有评论
	const comments = article.data[0].comments

	let commentObj = {
		comment_id: genID(5), // 评论id
		comment_content: content, // 评论内容
		create_time: new Date().getTime(), // 创建时间
		is_reply:is_reply, // 却分主回复,还是子回复 
		author: {
			author_id: user._id, // 作者id
			author_name: user.author_name, // 作者名称
			avatar: user.avatar, // 作者头像
			professional: user.professional // 专业
		},
		replys: []
	}

	// 评论文章
	if (comment_id === '') {
		commentObj.replys = []
		commentObj = dbCmd.unshift(commentObj)
	} else {
		// 回复对文章的评论
		// 获取评论索引
		let commentIndex = comments.findIndex(item => item.comment_id === comment_id)

	
		let commentAuthor = ''
		if(is_reply){
			// 子回复
			commentAuthor = comments[commentIndex].replys.find(item=>item.comment_id === reply_id)
		}else{
			// 主回复
			// 获取作者信息
			commentAuthor = comments.find(item => item.comment_id === comment_id)
		}
		commentAuthor = commentAuthor.author.author_name
		commentObj.to = commentAuthor
		
		// 更新回复信息
		commentObj = {
			[commentIndex]: {
//unshift数组类型字段追加头元素,支持数组https://uniapp.dcloud.io/uniCloud/cf-database?id=update-command

				replys: dbCmd.unshift(commentObj)
			}
		}

	}

	await db.collection('article').doc(article_id).update({
		comments: commentObj
	})

	//返回数据给客户端
	return {
		code: 200,
		msg: "数据更新成功"
	}
};


function genID(length) {
	return Number(Math.random().toString().substr(3, length) + Date.now()).toString(36)
}
'use strict';
// 获取数据库引用
const db = uniCloud.database()
//聚合表达式
表达式可以是字段路径、常量、或聚合操作符。表达式可以嵌套表达式。
字段路径
表达式用字段路径表示法来指定记录中的字段。字段路径的表示由一个 $ 符号加上字段名或嵌套字段名。嵌套字段名用点将嵌套的各级字段连接起来。如 $profile 就表示 profile 的字段路径,$profile.name 就表示 profile.name 的字段路径(profile 字段中嵌套的 name 字段)。
小细节,你要用,就得在下面,.aggregate()
const $ = db.command.aggregate
exports.main = async (event, context) => {

	const {
		user_id,
		article_id
	} = event

	let user = await db.collection('user').doc(user_id).get()
	user = user.data[0]
	let list = await db.collection('article')
//有时候我们需要对数据进行分析操作,比如一些统计操作、联表查询等,这个时候简单的查询操作就搞不定这些需求,因此就需要使用聚合操作来完成。

获取数据库集合的聚合操作实例
		.aggregate()
		.addFields({
			// 是否关注作者
			is_author_like: $.in(['$author.id', user.author_likes_ids]),
			// 是否收藏文章
			is_like: $.in(['$_id', user.article_likes_ids]),
			// 是否点赞
			is_thumbs_up: $.in(['$_id', user.thumbs_up_article_ids])
		})
		.match({
			_id: article_id
		})
		.project({
			coments: 0
		})
		.end()

	//返回数据给客户端
	return {
		code:200,
		msg:'数据请求成功',
		data:list.data[0]
	}
};
'use strict';
const db = uniCloud.database()
const $ = db.command.aggregate
exports.main = async (event, context) => {
	const {
		user_id,
		article_id,
		pageSize = 10,
		page = 1
	} = event

	const list = await db.collection('article')
		.aggregate()
		.match({
			_id: article_id
		})
		.unwind('$comments')
		.project({
			_id: 0,
			comments: 1
		})
		.replaceRoot({
			newRoot: '$comments'
		})
//主要想讲这里分页
		.skip(pageSize*(page-1))
		.limit(pageSize)
		.end()
	//返回数据给客户端
	return {
		code: 200,
		msg: '数据请求成功',
		data: list.data
	}
};

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐