节点Js - $ addToSet或$ push不用Mongoose(MongoDB)进行更新

时间:2017-01-14 02:19:55

标签: javascript node.js mongodb mongoose

我遇到Mongoose的问题,我想使用模块mongoose更新MongoDB中的文档,这是我的架构:

    var User = new mongoose.Schema({

        name: String,
        email: String,
        list_houses: [{
            id_house: String,
            price: Double
        }],
        ...

    });

当我想添加一个值' id_house'不重复使用下面的代码,这不起作用

User.update({'name': Name}, 
{$addToSet: {'list_houses': { 'id_house': new_houses , 'price': new_prices } } } ,
    if(err)console.log(err);
    console.log(result);
});

执行此操作时,BD中的结果为:

>db.users.find().pretty()
{
    "__v" : 0,
    "_id" : qweqweqweqweqweqwe,
    "email" : adadasdweqwe@gmail.com,
    "name" : Richard Smith,
    "list_houses" : [ ],
    .....
}

我也使用了$ push,但它都不起作用,我现在还不知道我的代码有什么问题。

1 个答案:

答案 0 :(得分:0)

很抱歉告诉您,但$addToSet不能使用数组中的Object值。

你告诉我为什么? 逻辑很简单,在JS中,当您将字符串/数字等与相同的值进行比较时,您会获得true但不会使用对象

因此{a:1}不等于{a:1}。当然因为对象与参考进行比较。

现在解决问题的方法是你必须手动完成

使用find获取列表。如果您的对象存在,请检查列表。如果没有添加到列表中。

您还可以在查找查询中指定对象详细信息,只需查找可能不包含此数据(要插入)的文档