查找和更新具有多个子元素的项目

时间:2015-09-07 15:44:53

标签: javascript mongodb mongodb-query

我在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'},我需要插入5来自items的两个或多个ITEM MAP DATA。结果应该反映如下类似的东西,

项目数据结果

{
    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。但似乎没有工作,我不知道如何合并我的第二个查询。

如果专家能够为我提供能够达到我要求的代码片段,示例或参考资料,我将非常感激。

非常感谢:)

1 个答案:

答案 0 :(得分:0)

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

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