【问题标题】:Find and update items with multiple child elements查找和更新具有多个子元素的项目
【发布时间】:2015-09-07 15:44:52
【问题描述】:

我在MongoDB中有如下数据,

项目数据

{
    id:1, 
    items: {3:'three', 4:'four'}

},
{
    id:2, 
    items: {}

},
{
    id:3, 
    items: {1:'one', 2:'two', 6:'six'}

},
{
    id:4, 
    items: {1:'one', 2:'two', 'three'}

},
{
    id:5, 
    items: {1:'one', 2:'two'}

},
{
    id:6,
    items: {1:'one'}
}

我在本地也有如下物品的地图,

项目地图数据

{
    1:'one',
    2:'two',
    3:'three',
    4:'four'
}

假设我需要插入{5: 'five'},我需要在ITEM MAP DATA 有两个或多个items 的地方插入5。结果应该反映如下类似的内容,

项目数据结果

{
    id:1, 
    items: {3:'three', 4:'four', 5'five'}

},
{
    id:2, 
    items: {}

},
{
    id:3, 
    items: {1:'one', 2:'two', 6:'six'}

},
{
    id:4, 
    items: {1:'one', 2:'two', 'three', 5:'five'}

},
{
    id:5, 
    items: {1:'one', 2:'two', 5:'five'}

},
{
    id:6,
    items: {1:'one'}
}

我对这个领域非常陌生,以下是我实现这一目标的尝试,

var dataItemMap = {};

dataItemMap['1']='one';
dataItemMap['2']='two';
dataItemMap['3']='three';
dataItemMap['4']='four';


var setObj = {};


DbConnector.getMutProConnection(function(err,db) {

  setObj['5'] = 'five';

  db.collection('itemData').update({
    "$where": "return Object.keys(this.items).length > 1"
  }, {$set: setObj}, {multi: true});

});

我通过阅读这篇文章提出了上述代码:Mongodb Query based on number of fields in a record。但似乎没有用,我不知道如何合并我的第二个查询。

如果各位专家能给我提供代码 sn-ps、示例或参考资料,我将不胜感激。

非常感谢:)

【问题讨论】:

  • mongodb 不支持连接,因此必须单独检查项目数据是否存在于 item_map 中。如果您不具备签入 item_map 的条件,那么我们应该能够对此进行查询。
  • @anish 我为我的要求实现了一种静态解决方法,但它不是正确的方法。我还发现在这种情况下连接是不可能的,如果我们可以形成一个查询来实现这一点,那就太好了

标签: javascript mongodb mongodb-query


【解决方案1】:

由于 MongoDB 中没有连接,因此您必须设计架构以避免查找“项目映射”,否则您必须在程序的内存中检查它。 没有该条件,查询可能如下。

db.item_data.update({ "$where": "return Object.keys(this.items).length > 1" }, {$set : {"items.5" : "five"}}, false, true)

【讨论】:

  • 非常感谢您的帖子!我会检查这个并回帖:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多