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

  • 相关阅读:
    微软WP7本机数据库解决方案之Sqlite
    NSIS nsDialogs Plugin
    NSIS 的 Modern UI 教程
    C# Sqlite For WP7
    铁血规则:事件预订与取消预订[转]
    .NET FRAMEWORK2.0中的农历类
    DefWndProc/WndProc/IMessageFilter的区别
    经典正则表达式分析与收藏
    博客园怎么了?
    .net项目开发工具(最近更新V2.1.0.5)
  • 原文地址:https://www.cnblogs.com/ExMan/p/11759051.html
Copyright © 2011-2022 走看看