如何使用过滤器和MongoDb中的$推送到数组中的嵌入列表而不重复

时间:2016-12-13 19:34:17

标签: mongodb mongoose

我正在尝试为以下用例的用户创建更新查询。

鉴于我是想要将项目添加到列表

的用户

我有多个列表

如果项目尚未列在列表

,请将该项目添加到列表中

同一项目可能出现在用户拥有的多个列表中 - 但不能多次出现在同一个列表中。这是我在mongoose中使用的查询,但是如果数组中有多个列表并且我有过滤器'lists.items.id': { '$ne': 'ASIN-B016I2XLBS' }并且有多个列表,则查询会过滤所有内容。我应该查询lists.$.items.id吗?当有多个项目时,我的插入语句lists.$.items不正确吗?

db.users.findAndModify({ 
  'lists.items.id': { '$ne': 'ASIN-B016I2XLBS' }, 
  'lists._id': ObjectId("585047a43246d621dd96c12e"), 
  username: 'foo' }) [] 
{ '$push': { 'lists.$.items': 
      { prouctName:'bar', id: 'ASIN-B016I2XLBS' } 
    } 
} { new: true, upsert: false, remove: false }

示例用户<​​/ p>

{
    "_id" : ObjectId("585046a535543ff7dc23ae1d"),
    "username" : "foo",
    "lists" : [ 
        {
            "_id" : ObjectId("585046a535543ff7dc23ae1e"),
            "items" : [ 
                {
                    "name" : "Regalo My Cot Portable Bed, Royal Blue",
                    "id" : "ASIN-XXXZZZ"
                }, 
                {

                    "name" : "bar"
                    "id" : "ASIN-B016I2XLBS"
                }
            ],
            "name" : "Shopping List"
        }, 
        {
            "_id" : ObjectId("585047a43246d621dd96c12e"),
            "items" : [],
            "name" : "Christmas"
        }
    ]
}

0 个答案:

没有答案