gpt4 book ai didi

node.js - addToSet 相当于包含子文档的数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:17 26 4
gpt4 key购买 nike

我有一个userSchema,其中包含一个 id 和一个 friend 数组。 friend 数组实际上是另一个模式的数组,其中包含 id、性别和姓名,因此是一个 SubDocuments 数组。

var attributesSchema = new Schema({

id: String,
gender: String,
name: String

})

var userSchema = new Schema({

id: {
type: String,
unique: true,
required: true
},

Friends: [attributes]

});

之前,我曾经让 Friends 等于 String 数组。在这种情况下,AddToSet 工作得很好,因为它不会向 Friends 数组中添加某些内容,除非它具有不同的字符串值。然而,不幸的是,对于子文档,addToSet 无法确定某些内容是否重复。

我不复制子文档的尝试如下:

User.update({
id: req.body.userId
}, {
$addToSet: {
Friends: {
id: req.body.friendId,
gender: req.body.gender,
name: req.body.name
}
}
});

显然,这不起作用,我正在寻找一种在 Friends 数组中添加唯一子文档的方法。

最佳答案

当元素与子文档元素不匹配时,您可以使用 $not$elemMatch 进行实际更新:

User.update({
"id": req.body.userId,
"Friends": {
"$not": {
"$elemMatch": {
"id": req.body.friendId
}
}
}
}, {
$addToSet: {
Friends: {
"id": req.body.friendId,
"gender": req.body.gender,
"name": req.body.name
}
}
});

如果您有其他重复条件,可以将字段添加到 $elemMatch

关于node.js - addToSet 相当于包含子文档的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41310909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com