【发布时间】:2020-07-23 09:07:38
【问题描述】:
这看起来很简单,但由于某种原因,当我将第二个字段放入 match 语句时,我的聚合返回一个空数组。
我已经检查了这些:
Combining match on text field with aggregate
Match Two different fields in Mongoose, Aggregate?
Mongodb compare two fields with matched fields value aggregate
这就是我想要的:
我想要一个匹配语句来比较我的架构中的两个字段,这些字段仅返回 createdByUserId 的数据并且大于或等于某个开始日期
$match:
{ $and:
[
{ createdByUserId: userId },
{ dateStart: { $gte: new Date(startDate) } }
]
}
这就是它的解决方法:
{
"$match": {
"$and": [
{
"createdByUserId": "5e6c2dddad72870c84f8476b"
},
{
"dateStart": {
"$gte": "2020-04-10T14:35:02.478Z"
}
}
]
}
}
这是我尝试过的
我尝试仅使用 createdByUserId 来简化问题-但是-不起作用
我相信用户 ID 匹配是我的问题的症结
$match:
{
createdByUserId: userId
}
确定为:
{
"$match": {
"createdByUserId": "5e6c2dddad72870c84f8476b"
}
}
我认为这可能是一个“字符串到对象 id”的问题并尝试了这个(但它不起作用)
$match:
{
createdByUserId: { $eq: {$toOjbectId:userId} }
}
确定为:
{
"$match": {
"createdByUserId": {
"$eq": {
"$toOjbectId": "5e6c2dddad72870c84f8476b"
}
}
}
}
更多信息
为了展示整个管道,这里是我的聚合:
var match = {
$match:
{ $and:
[
{ createdByUserId: userId },
{ dateStart: { $gte: new Date(startDate) } }
]
}
};
var lookup ={
$lookup:
{
from: "MyEvents",
localField: "_id",
foreignField: "eventId",
as: "SignedUpUsers"
}
};
var project = {
$project: {
"_id": 1,
"name": 1,
"dateStart": 1,
"createdByUserId": 1
}
};
var agg = [
match,
lookup,
project
];
Event.aggregate(agg)
.sort({dateStart: 1})
.then( events => {
if(events){
return resolve(events);
}else{
return reject(null);
}
})
.catch(err => {
return reject(err);
})
这是事件架构
const EventSchema = new Schema({
name: {type: String, required: true},
dateStart: {type: Date, required: true},
createdByUserId: {type: Schema.Types.ObjectId, required: true},
})
这是 MyEvents 架构
const MyEventsSchema = new Schema({
userId: {type: Schema.Types.ObjectId, required: true},
eventId: {type: Schema.Types.ObjectId, required: true},
})
(集合中有需要返回的数据)
如何匹配两个不同的字段?
更新
感谢 whoami,这可行:
const mongoose = require("mongoose");
{
$match: {
createdByUserId: mongoose.Types.ObjectId(userId);
}
}
但是谁能告诉我为什么这不会将字符串更改为对象 id:
{$toOjbectId:userId}
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework