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

Kéo một mục từ một mảng qua Meteor

Đối với một ứng dụng sao băng cơ bản, tôi gọi cái này là "bunk". Nếu bạn tạo một dự án hoàn toàn mới và chỉ cần xác định bộ sưu tập, thì $pull nhà điều hành hoạt động như mong đợi:

Bảng điều khiển:

meteor create tickets
cd tickets
meteor run

Sau đó, mở một trình bao và chèn dữ liệu của bạn:

meteor mongo

> db.tickets.insert(data)   // exactly your data in the question

Sau đó, chỉ cần tạo một số mã và mẫu cơ bản:

tickers.js

Tickers = new Meteor.Collection("tickers");

if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

tickers.html

<head>
  <title>tickers</title>
</head>

<body>
  <h1>Welcome to Meteor!</h1>

  <ul>
    {{#each tickers}}
      {{> ticker}}
    {{/each}}
  </ul>

</body>

<template name="ticker">
  <li>
    {{_id}}
    <ul>
      {{#each entries}}
        {{> entry }}
      {{/each}}
    </ul>
  </li>
</template>

<template name="entry">
  <li>{{ id }} - {{text}}</li>
</template>

Ứng dụng sẽ chạy tốt, vì vậy trong bảng điều khiển trình duyệt của bạn, hãy thực hiện .update() (thụt vào để đọc):

Tickers.update(
    { "_id": "ZcEvq9viGQ3uQ3QnT" },
    { "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)

Và mục được xóa khỏi các mục nhập và trang được làm mới mà không có mục đó. Vì vậy, tất cả đã trôi qua, đúng như mong đợi.

Ngay cả khi thêm các gói SimpleSchema và Collection2, không có gì khác biệt ở đây:

 meteor add aldeed:simple-schema
 meteor add aldeed:collection2

tickers.js

Tickers = new Meteor.Collection("tickers");

TickerEntries = new SimpleSchema({
  "id": {
    type: String,
    optional: true,
    autoValue: function() {
      if (!this.isSet) {
        return new Mongo.Collection.ObjectID()._str
      }
    }
  },
  "text": {
    type: String
  }
});

Tickers.attachSchema(
  new SimpleSchema({
    entries: { type: [TickerEntries] }
  })
);


if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

Khởi tạo lại dữ liệu và chạy lệnh tương tự trong bảng điều khiển của trình duyệt và mọi thứ vẫn như cũ.

Kiểm tra lỗi này hoặc bất kỳ lỗi đánh máy nào trong các thao tác của riêng bạn hoặc các khác biệt khác để biết manh mối tại sao điều này không hiệu quả với bạn.

Tôi thực sự đề xuất điều này, vì "bắt đầu mới" như thế này cho thấy hành vi mong đợi và nếu bạn thấy hành vi khác thì có thể là sự cố với một plugin khác mà bạn đã cài đặt.

Nhưng nhìn chung, điều này hoạt động.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB như một dịch vụ hàng đợi?

  2. MongoDB chọn vị trí trong mảng _id?

  3. Sắp xếp kết quả tổng hợp addToSet

  4. Cách tối ưu hóa hiệu suất của MongoDB

  5. Giới thiệu về Máy chủ Percona cho MongoDB 4.2