【发布时间】:2018-05-09 09:39:04
【问题描述】:
我是使用 mongodb 编程的 node js 新手。我正在使用mongodb 模块,我想使用用户公共信息执行帖子“加入”。我现在使用的代码如下:
db.collection('post').aggregate({
'$match': { category: 'video', status: 'online' },
'$lookup':
{
from: 'user',
localField: 'user',
foreignField: '_id',
as:'user'
},
'$project':
{ text: 1,
imgs: 1,
video: 1,
datetime: 1,
user: 1,
category: 1,
marketplace: 1,
tags: 1 } }
})
.toArray(function(err,posts){console.log(posts)})
但没有任何效果。即使类别不是music,我也只会收到帖子,并且查找不会将对象绑定到结果数组。
更新 即使让 $match 参数仅作为聚合查询,聚合也不起作用
返回的集合是
[
{
"_id":"5aed6cbbd8362bcc0f2d95ab",
"category":"music",
"video":"",
"imgs":[],
"videoImage":false,
"text":"post text",
"tags":{["first","try"]},
"datetime":1525509307968,
"user":"FuRRTBEYBmCSDPJkN",
"status":"online","marketplace":null},
{
"_id":"5aedc26c6defa3d3a6de7126", "category":"music",
"video":"https://www.youtube.com/embed/1yvLYJ2Fe_c",
"imgs" [],
"videoImage":"https://i.ytimg.com/vi/1yvLYJ2Fe_c/hqdefault.jpg",
"text":"second post text second post text second post text ",
"tags":{["second","post"]},
"datetime":1525531244425,
"user":"FuRRTBEYBmCSDPJkN",
"status":"online",
"marketplace":null
}
]
预期的结果是
[
{
"_id":"3aed6cbbd8362bcc0f2d95ab",
"category":"video",
"video":"",
"imgs":[],
"videoImage":false,
"text":"post text",
"tags":{["first","video"]},
"datetime":1525509307968,
"user": {_id: 'FuRRTBEYBmCSDPJkN', username: 'user1',img: '/path/to/the/image.png'},
"status":"online","marketplace":null},
{
"_id":"4aedc26c6defa3d3a6de7126", "category":"video",
"video":"https://www.youtube.com/embed/1yvLYJ2Fe_c",
"imgs" [],
"videoImage":"https://i.ytimg.com/vi/1yvLYJ2Fe_c/hqdefault.jpg",
"text":"second video ",
"tags":{["second","video"]},
"datetime":1525531244425,
"user":{_id: 'FuRRTBEYBmCSDPJkN', username: 'user1',img: '/path/to/the/image.png'},
"status":"online",
"marketplace":null
}
]
【问题讨论】:
-
"as"属性是要输出的字段的名称,而不是选择要返回的字段。该站点以及文档中已经发布了非常清晰的示例。从每个集合中发布示例文档,这些文档实际上会相互“连接”,以期有人能够帮助您。 -
好的。谢谢你。即使在此编辑之后,也没有任何改变。
-
再次向您展示收藏。
$lookup操作期望"user"的localField值包含 完全相同 值,该值在名为"user"的“集合”中(即from)"_id"字段,如foreignField。通常这意味着ObjectId值,因此请确保两者都具有并且它们匹配。这意味着其中一个实际上不能是字符串。 -
展示你的收藏。说真的,如果你不这样做,那么问题将不得不被关闭。您不知道自己在做什么,为了让其他人帮助您,我们实际上需要“查看数据”。每隔几分钟添加粗体 EDIT 语句不会帮助任何人回答您的问题。对于我们看不到的东西,我们无能为力。
-
真正的问题是你 expect category:'music' 。至少这是我阅读“预期结果将是”sn-p 代码的方式。没有应用 $match 只是因为管道的语法错误,它应该是一个阶段数组,它比通信问题更容易修复。
标签: node.js mongodb mongodb-query