MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tìm tài liệu trong đó một trường so sánh với một trường khác trong một mảng

Bạn vẫn có thể sử dụng aggregate() ở đây với MongoDB 3.2, nhưng chỉ sử dụng $redact thay vào đó:

db.boards.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$and": [
          { "$ne": [ "$createdBy._id", "$owner._id" ] },
          { "$setIsSubset": [["$createdBy._id"], "$acl.profile._id"] }
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

Hoặc với $where đối với trình bao MongoDB 3.2, bạn chỉ cần giữ một bản sao có phạm vi của this và cú pháp của bạn hơi sai:

db.boards.find({
  "$where": function() {
    var self = this;
    return (this.createdBy._id != this.owner._id)
      && this.acl.some(function(e) {
        return e.profile._id === self.createdBy._id
     })
  }
})

Hoặc trong môi trường tương thích ES6 thì:

db.boards.find({
  "$where": function() {
    return (this.createdBy._id != this.owner._id)
      && this.acl.some(e => e.profile._id === this.createdBy._id)
  }
})

Tổng hợp là tùy chọn hoạt động hiệu quả nhất trong hai tùy chọn và nên luôn được ưu tiên hơn khi sử dụng đánh giá JavaScript

Và đối với những gì nó đáng giá, cú pháp mới hơn với $expr sẽ là:

db.boards.find({
  "$expr": {
    "$and": [
      { "$ne": [ "$createdBy._id", "$owner._id" ] },
      { "$in": [ "$createdBy._id", "$acl.profile._id"] }
    ]
  }
})

Sử dụng $in ưu tiên $setIsSubset trong đó cú pháp ngắn hơn một chút.

    return (this.createdBy._id.valueOf() != this.owner._id.valueOf())
      && this.acl.some(e => e.profile._id.valueOf() === this.createdBy._id.valueOf())



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose kéo ObjectId từ mảng

  2. Mongoid 3 + Heroku (MongoHQ) gây ra Moped ::Lỗi ::Hoạt độngFailure

  3. Làm cách nào để truy xuất thời gian cập nhật cuối cùng của mỗi tài liệu trong MongoDB?

  4. Chuyển đổi sang ngày MongoDB qua mongoimport

  5. cấu trúc lồng nhau truy vấn mongodb