【问题标题】:MongoDB CoffeeScript find document with several fieldsMongoDB CoffeeScript 查找包含多个字段的文档
【发布时间】:2023-03-21 14:41:01
【问题描述】:

我如何检查是否有任何文件名称:“John”和年龄:40?

这似乎不起作用

    db.Event.findOne name: "John", age: 40, (error, result) ->
        unless result
            db.Event.save {name: "John", age: 40}
            # document not found, so add it
            inserted = true
        else
            # document found
            inserted = false

【问题讨论】:

    标签: mongodb coffeescript


    【解决方案1】:

    听起来您需要 $setOnInsert 更新运算符,当与更新标志 { "upsert": true } 一起在原子 update() 中使用时操作,该操作插入一个新文档,$setOnInsert 将指定的值分配给文档中的字段。如果更新操作没有导致插入,$setOnInsert 什么都不做:

    JavaScript

    var data = {
        "name": "John",
        "age": 40
    }
    
    db.Event.update(
        data,
        { "$setOnInsert": data },
        { "upsert": true }
    )
    

    CoffeeScript

    data = 
      'name': 'John'
      'age': 40
    db.Event.update data, { '$setOnInsert': data }, 'upsert': true
    

    【讨论】:

    • 如果插入布尔值inserted,如何设置为true,否则设置为false?
    • 您可以使用回调,我在下面“增强”了 chriman 答案。
    • 使用@ShanShan 指定的回调,但在有人回答时更改您的问题被认为是不好的做法。我已经在你最初的问题的前提下回答了,看起来这个revision 已经解决了,不是吗?至于"next"的问题,那就另当别论了,考虑单独发帖吧。
    • 对不起,我最初忘记添加该部分。下次改的话我再单独提问!
    【解决方案2】:

    管理inserted布尔值的回调:

    data =
        'name': 'John'
        'age': 40
    
    inserted = false
    db.Event.update data,
        { '$setOnInsert': data },
        'upsert': true,
        (error, result) ->
            inserted = not error
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多