zoukankan      html  css  js  c++  java
  • mongodb中对数组的操作命令

    mongodb中对数组的操作命令有
    $push、$ne、$addtoset、$pop、$pull

    ###addtoset会碰到的问题
    addtoset解释: 往数组里面加入数据,如果数组里已经存在,则不会加入(避免重复) 。
    以加一个加好友的操作为例子,当加好友时,除了好友ID, 还需要成为好友的时间戳时(addtime)。

    {
    "_id" : 100000,
    "friedns" : [
    {
    "uid" : 100001,
    "addtime" : NumberLong(1532676854771)
    }
    ]
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    此时,更改一下addtime,再执行一次uid10001的addtoset
    语句为:

    db.friendship.update(
    {"_id":100000}
    ,
    {"$addToSet":{"friedns":{"uid":NumberInt(100001),"addtime":NumberLong(1532676854770)}}}
    )
    1
    2
    3
    4
    5
    这时问题就来了:结果只是因为时间戳变了,又添加了一个相同的好友:

    {
    "_id" : 100000,
    "friedns" : [
    {
    "uid" : 100001,
    "addtime" : NumberLong(1532676854771)
    },
    {
    "uid" : 100001,
    "addtime" : NumberLong(1532676854770)
    }
    ]
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    说明addtoset只能用在固定的数组对象中。

    ###使用ne+push解决问题

    db.friendship.update(
    {"_id":100000, "friedns.uid": {$ne: 100001}}
    ,
    {"$push":{"friedns":{"uid":NumberInt(100001),"addtime":NumberLong(1532676854770)}}}
    )
    1
    2
    3
    4
    5
    ne方案解释: 一个特定值不在数组里时就把它加进去,避免重复数据
    这时只会对uid进行重复判断,问题解决。
    ————————————————
    版权声明:本文为CSDN博主「iamfrankjie」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/iamfrankjie/article/details/81238619

  • 相关阅读:
    算法训练 区间k大数查询
    算法训练 最大最小公倍数
    身份证号码升级
    python包与模块导入
    python函数
    HDU 3595 博弈论,被支配的恐惧
    BZOJ 3195 [Jxoi2012]奇怪的道路
    大暑假集训
    [Poi2010]Monotonicity 2
    BZOJ 4868 HEOI 期末考试
  • 原文地址:https://www.cnblogs.com/ExMan/p/11759051.html
Copyright © 2011-2022 走看看