'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
}
};