如何防止在Mongodb中推送具有相同属性的文档

诛戮

我有以下结构。我想防止推送具有相同属性的文档。

例如,基本上,我首先找到用户对象。如果我有另一个vid(已经在里面),它将不会被推入。尝试使用$ addToSet,但是失败了。

我在用猫鼬。

这是我的模型结构:

var User = mongoose.model('User', {
oauthID: Number,
name: String,
username: String,
email: String,
location: String,
birthday: String,   
joindate: Date,
pvideos: Array
});

这是我推入Mongo的代码

exports.pinkvideo = function(req, res) {
var vid = req.body.vid;
var oauthid = req.body.oauthid;
var User = require('../models/user.js');

var user = User.findOne({
    oauthID: oauthid
}, function(err, obj) {
    if (!err && obj != null) {
        obj.pvideos.push({
            vid: vid
        });
        obj.save(function(err) {
            res.json({
                status: 'success'
            });
        });

    }
});

};

尼尔·伦恩

您想要的是.update()方法,而不是.save()在进行更改后检索文档并使用

这不仅使您能够访问$addToSet所提到运算符,而且其目的是避免在数组中重复数据,因为将更改仅发送到数据库而不是整个文档来回发送,所以效率更高得多:

User.update(
    { oauthID: oauthid },
    { "$addToSet": { "pVideos": vid } },
    function( err, numAffected ) {
        // check error
        res.json({ status: "success" })
    }
)

唯一可能的问题是它确实取决于您实际向阵列中推送的内容并期望它是唯一的。因此,如果您的数组已经看起来像这样:

[ { "name": "A", "value": 1 } ]

然后您发送并更新了一个像这样的数组元素:

{ "name": "A", "value": 2 }

这样,该文档将不会被认为仅存在于“名称”中“ A”的值上,而是会添加其他文档,而不仅仅是替换现有文档。

因此,您需要小心自己的意图,如果这是您要寻找的逻辑,那么您将需要查找文档并针对所需条件测试现有的阵列条目。

但是对于您根本不想添加清晰重复项的基本方案,则$addToSet如图所示,这就是您想要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将数据推送到更多具有相同属性的对象中

来自分类Dev

如何防止titan生成具有相同属性的重复记录?

来自分类Dev

如何删除所有具有相同属性值但NSMutableArray中的对象的对象

来自分类Dev

如何排列具有相同属性值的对象数组?

来自分类Dev

如何创建具有相同属性\方法的组件

来自分类Dev

如何添加具有相同属性的多个UIImageViews

来自分类Dev

如何选择具有相同属性的后续行

来自分类Dev

如何避免创建具有相同属性的对象

来自分类Dev

GraphViz文件中具有相同属性的节点组

来自分类Dev

在matplotlib中绘制具有相同属性的多个函数

来自分类Dev

如何在pygame中创建具有相同属性的许多实例

来自分类Dev

Java-如何从集合中删除具有相同属性值的元素?

来自分类Dev

如何使用VB.net计算XML中具有相同属性值的节点总数

来自分类Dev

如何避免在neo4j中多次访问具有相同属性的节点?

来自分类Dev

如何从具有相同属性值的列表中删除项目,其中计数大于 2

来自分类Dev

从列表生成具有相同属性的对

来自分类Dev

具有几乎相同属性的模型

来自分类Dev

创建具有相同属性的方法

来自分类Dev

合并具有相同属性的元素

来自分类Dev

如何在硒中的不同标签中定位具有相同名称和相同属性的元素

来自分类Dev

在Powershell中,如何在数组中测试已经包含具有所有相同属性的对象?

来自分类Dev

流星/ MongoDB:按相同属性的多个值查找文档

来自分类Dev

如何在React JS中获取具有相同属性名称的数组中输入标签的值

来自分类Dev

如何在MongoDB中具有相同字段的子文档,多文档中重新注册?

来自分类Dev

R如何通过创建新列在一行中写入可变数量的具有相同属性的行

来自分类Dev

如何获取具有相同名称和相同属性名称的节点到集合?

来自分类Dev

返回Cypher中具有相同属性B的节点的属性A的总和

来自分类Dev

如何将具有相同属性的所有字典从数组转换为新数组?

来自分类Dev

如何合并具有相同属性的RDF主题,对其值求和?

Related 相关文章

  1. 1

    如何将数据推送到更多具有相同属性的对象中

  2. 2

    如何防止titan生成具有相同属性的重复记录?

  3. 3

    如何删除所有具有相同属性值但NSMutableArray中的对象的对象

  4. 4

    如何排列具有相同属性值的对象数组?

  5. 5

    如何创建具有相同属性\方法的组件

  6. 6

    如何添加具有相同属性的多个UIImageViews

  7. 7

    如何选择具有相同属性的后续行

  8. 8

    如何避免创建具有相同属性的对象

  9. 9

    GraphViz文件中具有相同属性的节点组

  10. 10

    在matplotlib中绘制具有相同属性的多个函数

  11. 11

    如何在pygame中创建具有相同属性的许多实例

  12. 12

    Java-如何从集合中删除具有相同属性值的元素?

  13. 13

    如何使用VB.net计算XML中具有相同属性值的节点总数

  14. 14

    如何避免在neo4j中多次访问具有相同属性的节点?

  15. 15

    如何从具有相同属性值的列表中删除项目,其中计数大于 2

  16. 16

    从列表生成具有相同属性的对

  17. 17

    具有几乎相同属性的模型

  18. 18

    创建具有相同属性的方法

  19. 19

    合并具有相同属性的元素

  20. 20

    如何在硒中的不同标签中定位具有相同名称和相同属性的元素

  21. 21

    在Powershell中,如何在数组中测试已经包含具有所有相同属性的对象?

  22. 22

    流星/ MongoDB:按相同属性的多个值查找文档

  23. 23

    如何在React JS中获取具有相同属性名称的数组中输入标签的值

  24. 24

    如何在MongoDB中具有相同字段的子文档,多文档中重新注册?

  25. 25

    R如何通过创建新列在一行中写入可变数量的具有相同属性的行

  26. 26

    如何获取具有相同名称和相同属性名称的节点到集合?

  27. 27

    返回Cypher中具有相同属性B的节点的属性A的总和

  28. 28

    如何将具有相同属性的所有字典从数组转换为新数组?

  29. 29

    如何合并具有相同属性的RDF主题,对其值求和?

热门标签

归档