Javascript 如何在Mongoose中仅获取唯一值?
我只需要从集合中获取唯一值。例如:Javascript 如何在Mongoose中仅获取唯一值?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我只需要从集合中获取唯一值。例如: constuserid=`user1`; const users=等待聊天 .find({'$or':[{to:userID},{from:userID}]}) .选择(`-\u id to from`) .lean(); //用户会喜欢: [ {from:`user1`,to:`user2`}, {from:`user1`,to:`user2`}, {from:`user1`,to:`user2`}, {from:`user2`,to:`user1`}, {
constuserid=`user1`;
const users=等待聊天
.find({'$or':[{to:userID},{from:userID}]})
.选择(`-\u id to from`)
.lean();
//用户会喜欢:
[
{from:`user1`,to:`user2`},
{from:`user1`,to:`user2`},
{from:`user1`,to:`user2`},
{from:`user2`,to:`user1`},
{from:`user3`,to:`user1`},
//…还有10089件物品
];
//我想要这个结果
const result=[`user2`、`user3`];//也排除当前用户
我知道我可以用JS来做这件事。我可以从用户创建一个数组并运行
newset()
,但速度会很慢。Mongoose能代替我做这个吗?你可以试试聚合查询
您的条件$match
按null设置,并构造从用户到用户的唯一数组$group
从$setUnion
从
和
到
数组获取唯一的
用户
迭代上述联合数组的循环并删除当前用户$filter
我觉得很奇怪。它不起作用了。结果是一个空数组(console.log(users))。我已经从聚合管道数组中删除了第二个和第三个元素,结果也是一个空数组。我不确定,能否尝试在函数后添加.exec(),就像我更新了答案一样。我添加了
const users=wait Chat.aggregate([{$match:{$or:[{{to:userID},{from:userID}]},]]).exec();console.log(用户)代码>。您的代码和它只返回[]数据库集合中from
和to
字段中的实际内容?Types.ObjectIdconst schema=new schema({date:{type:date,required:true},read:{type:Boolean,default:false},content:{type:String,required:true},to:{type:Types.ObjectId,ref:
User,required:true},from:{type:Types.ObjectId,ref:
User,required:true},});
const userID = mongoose.Types.ObjectId(`user1`);
const users = await Chat.aggregate([
{ $match: { $or: [{ to: userID }, { from: userID }] } },
{
$group: {
_id: null,
from: { $addToSet: "$from" },
to: { $addToSet: "$to" }
}
},
{
$project: {
_id: 0,
users: {
$filter: {
input: { $setUnion: ["$from", "$to"] },
cond: { $ne: ["$$this", userID] }
}
}
}
}
]).exec();
console.log(users[0].users);